索引

索引的分类:

  • 唯一性索引和非唯一性索引
    唯一性索引是索引值不重复的索引,非唯一性索引是索引值可以重复的索引。无论是唯一性索引还是非唯一性索引,索引值都允许为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;