Oracle 11g笔记——索引

索引类型

二叉树索引、B树索引(B-tree Indexes)

B树索引是使用最多的一种索引。默认情况下,创建的索引都是B树索引。使用B树结构来存放索引。B树底层是叶子节点,叶子节点存放索引值和行标识(ROWIND)

二叉树聚簇索引(B-tree Cluster Indexes)

哈希聚簇索引(Hash Cluster Indexes)

反向索引(Reverse Key Indexes)

反向索引也属于B树索引,它把索引值按字节反转过来。反向索引适合集群

位图索引(Bitmap Indexes)

位图索引使用位图作为索引的结构,对于索引列中的每个同的值(特别强调,是列的列值),Oracle将建立一个位图,如果列的值出现,则Oracle将把位图中相应的位(bit)标识为1;

若那个值没有出现,Oracle会把位图中相应的位(bit)标识为0。Oracle通过一个映射函数把位图中的位(bit)转变为ROWID。

位图索引适合唯一值很少的列(如:SEX),也就是重复值很多的列。

位图连接索引(Bitmap Join Indexes)

基于函数的索引(Function-Based Indexes)

示例:

唯一性索引:

SQL>create unique index index_name on ct(name) tablespace bigtbs_01;

二叉树索引

SQL>create index ind_name4 on ct(name);

位图索引,适合唯一值很少的列

SQL>create bitmap index ind_name5 on ct2(name);

反向索引

SQL>create index ind_name3 on ct(name) reverse;

函数索引

SQL>create index ind_name on ct(al + av*100);

SQL>create index ind_name2 on ct(upper(name));

重建索引

SQL>alter index ind_name3 rebuild;

删除索引

SQL>drop index ind_name3;

将索引移至另外一个表空间(alger index ... rebuild tablespace...)

SQL>select index_name,tablespace_name from dba_indexes where index_name=‘INDEX_PS‘;  查询

SQL>alter index index_ps rebuild tablespace product;    将索引移至product表空间

SQL>select index_name,tablespace_name from dba_indexes where index_name=‘INDEX_PS‘;  再次查询

如何得到创建索引的SQL语句

1、设置SQL*PLUS环境变量为LONG,注:若不执行此操作,执行DDL时会产生错误

SQL>SET LONG 10000

2、得到创建索引的SQL语句

SQL>select dbms_metadata.get_ddl(‘INDEX‘,‘TND_TMF‘,‘test‘) from dual;

注:test为索引的所有者

如何知道数据库中有哪些索引

SQL>select index_name,index_type,table_name from dba_indexes;

设置索引无效,可以让语句跳过无效索引

SQL>alter session set skip_unusable_indexes=true;

设置索引,可以让语句不跳过无效索引

SQL>alter session set skip_unusable_indexes=false;

重建索引,使索引变得有效

SQL>alter index index_name rebuild;

时间: 2024-10-04 03:36:44

Oracle 11g笔记——索引的相关文章

Oracle 11g笔记——索引组织表

一.索引组织表(Index-Organized Table, IOT) 索引组织表是一类特殊的表,它将索引和表的数据存储在一起.普通表的数据以无序(Heap)的方式存放在数据库中. 而索引组织表按照主键进行排序,以二叉树的形式对表的数据进行存储. 索引组织表不存储ROWID,它通过主键来访问数据. 索引组织表适合通过主键对数据进行访问的应用. 1.优点 (1)快速的随机访问.索引和表的数据存储在一起,如果对表进行更新,Oracle只更新索引结构. (2)快速的范围扫描.索引组织表已经按照主键对数

Oracle 11G 笔记:无法导出空表的解决办法

最近在用ORACLE 11G .对数据导出导入的时候发现一个问题:oracle 不会对无数据的空表进行导出.查资料发现,原来这种情况只出现在Oracle 11g 中,处理办法如下: sqlcommand:  alter system set deferred_segment_creation=false; 意思是禁止推迟创建表的段,也就是表创建后不管有没有数据都要分配空间.该参数修改后对该时间点以前创建的表无用.所以还是要对以前的表分配空间. sql:  Select 'alter table

CentOS安装oracle 11G笔记

系统:CentOS64 + oracle11G x86_64 1.关闭防火墙, # vi /etc/selinux/config 修改SELINUX=disabled,然后重启.如果不想重启系统,使用命令setenforce 0 2.建立脚本build.sh, # vim build.sh #注意以root登陆执行 将下列代码粘贴进去: #!/bin/bash #安装依赖库文件 yum -y install binutils compat-libcap1 \ yum -y install com

Oracle 11g笔记——RAC简介、意义

一.RAC简介 1.高可用性 是指整合了硬件和软件技术的综合解决方案.它保证在不丢失数据的前提下,应用程序(服务)能够不间断运行,也就是服务的有效性或服务的可持续访问性. 特征:可靠性:可靠的硬件和可靠的软件 可恢复性:提供各种机制,确保能从失败中恢复丢失的数据和失败的进程 错误自动检测:能自动探测各种错误,并采取相应措施 可持续性:当某些组件失败时,仍然能够继续对外界提供服务 Oracle HA解决方案:Oracle Golden Gate.Oracle Data Guard.Oracle S

ORACLE学习笔记 索引和约束

/*** 约束 ***/ * 如果某个约束只作用于单独的字段,即可以在字段级定义约束,也可以在表级定义约 束,但如果某个约束作用于多个字段,  必须在表级定义约束* 在定义约束时可以通过CONSTRAINT关键字为约束命名,如果没有指定,ORACLE将自动 为约束建立默认的名称 定义primary key约束(单个字段)create table employees (empno number(5) primary key,...) 指定约束名create table employees (emp

Oracle 11g笔记——分区表

一.分区表 分区技术,Oracle允许把一个大表分成几部分,每部分叫一个分区,然后把每个部分放在不同的物理磁盘,以提高整个数据库的性能. 每个分区还可以再分成几份,这样产生的分区叫子分区(Subpartition).分区表逻辑上还是一个整体. 1.优点: (1)分区技术使数据库的可管理性变得更加容易, 如:用户可以往一个单独的分区中装载数据,而对其它分区没有任何影响:用户可以在一个单独的分区上创建索引. (2)分区可以提高表的查询性能,SQL语句的WHERE子句会过滤掉不需要的分区,Oracle

Oracle 11g 预估索引大小

一.创建索引注意事项 1.预估索引大小 2.查看索引表空间可用空间大小 3.查看临时表空间大小 4.业务空闲期创建 5.可以考虑在线.并行.nologging模式 二.预估索引方法 操作步骤如下: SQL> explain plan for create index idx_object_id on tt(object_id) ; Explained. SQL> set lines 200 pages 1000 SQL> select * from table(dbms_xplan.di

oracle 11g rac 笔记(VMware 和esxi主机都可以使用)

这个只是笔记,防止丢失,没事见整理 在vmware安装目录 创建磁盘: vmware-vdiskmanager.exe -c -s 1000Mb -a lsilogic -t 2 D:\VMWARE\racsharedisk\ocr.vmdk vmware-vdiskmanager.exe -c -s 1000Mb -a lsilogic -t 2 D:\VMWARE\racsharedisk\ocr2.vmdk vmware-vdiskmanager.exe -c -s 1000Mb -a l

Oracle 11g新特性invisible index(不可见的索引)

如果一张表上有十几个索引,你有什么感受?显然会拖慢增.删.改的速度,不要指望开发人员能建好索引.我的处理方法是先监控很长的一段时间,看哪些索引没有用到,然后删除.但删除以后,如果发现某一天有用,那又要重新建,如果是大表,那就有些麻烦.现在11g提供一个新特性,不可见索引,可以建索引设置为不可见索引,CBO在评估执行计划的时候会忽略它,如果需要的时候,设置回来即可. 还有一种用途,你在调试一条SQL语句,要建一个索引测试,而你不想影响其他的会话,用不可见索引正是时候. SQL> drop tabl