索引类型
二叉树索引、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;