分类可以按逻辑设计和物理实现来分类。
索引逻辑分类
单列索引:基于一列的操作
多列索引:组合索引,最多为32列。组合索引的列不一定与表中列顺序相同。
惟一索引:列的值各不相同。
非惟一索引:列的值允许相同。
基于函数的惟一索引:利用表中一列或多列基于函数表达式所创建的索引。既可以是B-树,也可以是位图索引。
索引物理分类
分区或非分区索引,非分区既可以是B-树,也可以是位图索引。
B-树:包括正常或反转关键字索引,反转关键字在数据库优化中介绍。
位图索引
B-树索引
索引的存储方式
虽然所有索引都使用 B 树结构,但术语“B 树索引”通常与存储每个关键字的行标识列表的索引关联。
B 树索引结构
至上而下,是根结点、分枝结点及叶子结点,叶子结点中有指向表中数据行的索引行。叶子结点被双向链表在一起,以方便按索引关键字升序或降序扫描。
索引的顶部为根,其中包含指向索引中下一级的项,下一级为分枝块,分枝块又指向索引中下一级的块,最低一级为叶节点,其中包含指向表行的索引项。叶块为双重链接,有助于按关键字值的升序和降序扫描索引。
索引项叶节点的格式
索引项由以下三部分组成:
索引项叶结点的特征
在非分区表上的 B 树索引中:
DML 操作对索引的影响
当在表上执行 DML 操作时,Oracle 服务器将自动维护所有的索引,下面解释 DML命令对索引的影响:
位图索引也是一种B树,但叶子结点存的不是RowID,而是每一个键值的位图。
当表包含数百万行且关键字列的基数低时——即该列有非常少的独特值。例如,对包含护照记录的表的性别列和婚姻状况列,位图索引比 B 树索引更适合。
位图索引的结构
位图索引也可以组织为 B 树,但叶节点存储每个关键字值的位图而非行标识列表,位图中的每一位对应一个可能的行标识(RowID),如果设置了位,则意味着具有相应行标识的行包含关键字值。
如图所示,位图索引的叶节点包含下列几项:
开始行标识是位图的位图段所指向的第一行的行标识——即,位图的第一位对应此行标识,位图的第二位对应块中的下一行,而结束行标识是位图段所包含的表中最后一行的指针,位图索引使用受限行标识。
使用位图索引
B 树用于定位包含给定关键字值的位图段的叶节点,开始行标识和位图段用于定位包含关键字值的行。当更改表中的关键字列时,必须修改位图,这将导致锁定相关的位图段,由于锁是在整个位图段上获取的,位图包含的行直到第一个事务结束后才能由其它事务更新。
位图所使用的存储空间比B树小得多,通常情况下,Oracle将位图索引段装入到内存中,内存的速度是远大于磁盘空间操作的速度的。此外,进行And与Or等逻辑操作时,Oracle使用的是位操作,所以执行效率也很快。