索引
索引的分类:
- 唯一性索引和非唯一性索引
唯一性索引是索引值不重复的索引,非唯一性索引是索引值可以重复的索引。无论是唯一性索引还是非唯一性索引,索引值都允许为NULL
。在默认情况下,Oracle创建的索引是非唯一性索引。
当在表中定义主键约束或唯一性约束时,Oralce会自动在相应列上创建唯一性索引。 - 平衡树索引与位图索引
平衡树索引又称B树索引,是按照平衡树算法来组织索引的,在树的叶子节点中保存了索引值及其ROWID
。在Oracle
数据库中创建的索引默认为平衡树索引。平衡树索引包括唯一性索引、非唯一性索引、反键索引、单列索引、复合索引等多种。平衡树索引占用空间多,适合索引基数高、重复率低的索引。
位图索引实际上是一个二维数组,列数由索引值的基数决定,行数由表中记录的个数决定。位图索引占用空间小,适合索引值基数少,重复率高的应用。 - 单列索引与复合索引
索引可以建立在一列上,也可以创建在多列上。创建在一列上的索引称为单列索引,创建在多列上的索引称为复合索引。 - 函数索引
函数索引是指基于包含列的函数或表达式创建的索引(索引值为计算后的值)。在函数索引的表达式中可以使用各种算术运算符、PL/SQL函数和内置SQL函数。
1、创建索引
- 创建非唯一性索引
--在默认情况下,CREATE INDEX语句创建的是非唯一性的B树索引。
CREATE INDEX emp_sal_idx ON emp(sal);
- 创建唯一性索引
CREATE UNIQUE INDEX dept_name_idx ON dept(dname);
- 创建位图索引
CREATE BITMAP INDEX student_sex_idx ON student(sex);
- 创建反键索引
所谓反键索引是指将索引列字节内容反过来,能够提高某些使用并行服务器的OLTP应用的性能。
CREATE INDEX player_sage ON player(sage) REVERSE;
2、修改索引
- 合并索引
对索引的合并操作只是简单地将B树叶节点中的存储碎片合并在一起,并不会改变索引的物理组织结构(包括存储空间参数和表空间参数等)
ALTER INDEX emp_sal_idx COALESCE;
- 重建索引
重建索引的实质是在指定的表空间中重新建立一个新的索引,然后再删除原来的索引,这样不仅能够消除索引碎片,还可以改变索引的存储参数设置,并且将索引移到其它表空间中。
ALTER INDEX player_sage_idx REBUILD;
- 索引重命名
ALTER INDEX emp_name_idx RENAME TO emp_new_name;
3、删除索引
如果索引是定义约束时自动建立的,则在禁用约束或删除约束时会自动删除对应的索引。另外,在删除表时会自动删除与其相关的所有索引。
DROP INDEX emp_name_idx;