oracle索引的分类
1个回答
展开全部
B树索引和位图索引是按照索引的组织方式来分类的。
B树是指索引的组织方式是以索引块为节点的B+树,位图索引是按照索引值排列的。
函数索引:
顾名思义,这是指对列值做了函数之后存储的一种索引方式;
聚簇索引和非聚簇索引:
这是按照索引与table的关系区分的,如果table中的内容按照索引的顺序存储,则该索引为聚簇索引,否则为非聚簇索引。
1.1 B-树索引
B-树索引在oracle中是一个通用索引, 在创建索引时它就是默认的索引类型. B树索引可以是单列也可以是复合索引, B-树索引最多可以包括32列.
树叶块包含了索引值/ ROWID, 以及前一个和后一个树叶块的数据块地址(DBA). Oracle可以从两个方向遍历这个二叉树. B-树索引保存了在索引列上有值的每个数据行的ROWID值. Oracle不会对索引列上存有空值的行进行索引. 如果索引是多个列的组合索引, 而其中列上包含有空值, 这一行就会处于包含空值的索引列中, 且被处理为空.
1.2 位图索引
在位图索引中,oracle为每个唯一键创建一个位图, 然后把与键值所关联的ROWID保存为位图. 尽管位图索引最多可达30个列, 但通常他们都只用于少量的列.
对于多个B-树索引来说, 每个索引返回一组ROWID, 这组ROWID必须与其他索引所产生的ROWID范围进行比较. 每个结果集必须被比较,组合并再与其他结果集进行比较, 直到最终的结果集被确定. 由于在位图中只存储一次一个唯一列, 当列不是B-树索引的唯一列时就节省了很多空间.
在一个查询中合并多个B-树位图索引后,可以使性能显著提高. 位图索引使用固定长度的数据类型要比可变长度的数据类型好. 大的块也会提高对位图索引的存储和读取性能.
建议不要在一些联机事务处理(OLTP)应用程序中使用位图索引. B-树索引的索引值中包含ROWID, 这样oracle就可以在行级别锁上锁定索引. 位图索引被存储为压缩的索引值, 其中包含了一个范围的ROWID. 因此Oracle必须对一个给定值锁定所有范围内的ROWID. 这种锁定可能在某些DML语句中造成死锁.
1.3 HASH索引
1.4 索引编排表
1.5 反转键索引
1.6 基于函数的索引
1.7 分区索引
分区索引(partitional index)就是简单地把一个索引分成多个片段. 通过把一个索引分成多个片段, 您可以访问更小的片段. 并且可以把这些片段分别存储在不同的硬盘上(避免IO问题);
分区索引按照其前导列是否为分区字段可以区分为有前缀的索引和无前缀的索引两种.
B树是指索引的组织方式是以索引块为节点的B+树,位图索引是按照索引值排列的。
函数索引:
顾名思义,这是指对列值做了函数之后存储的一种索引方式;
聚簇索引和非聚簇索引:
这是按照索引与table的关系区分的,如果table中的内容按照索引的顺序存储,则该索引为聚簇索引,否则为非聚簇索引。
1.1 B-树索引
B-树索引在oracle中是一个通用索引, 在创建索引时它就是默认的索引类型. B树索引可以是单列也可以是复合索引, B-树索引最多可以包括32列.
树叶块包含了索引值/ ROWID, 以及前一个和后一个树叶块的数据块地址(DBA). Oracle可以从两个方向遍历这个二叉树. B-树索引保存了在索引列上有值的每个数据行的ROWID值. Oracle不会对索引列上存有空值的行进行索引. 如果索引是多个列的组合索引, 而其中列上包含有空值, 这一行就会处于包含空值的索引列中, 且被处理为空.
1.2 位图索引
在位图索引中,oracle为每个唯一键创建一个位图, 然后把与键值所关联的ROWID保存为位图. 尽管位图索引最多可达30个列, 但通常他们都只用于少量的列.
对于多个B-树索引来说, 每个索引返回一组ROWID, 这组ROWID必须与其他索引所产生的ROWID范围进行比较. 每个结果集必须被比较,组合并再与其他结果集进行比较, 直到最终的结果集被确定. 由于在位图中只存储一次一个唯一列, 当列不是B-树索引的唯一列时就节省了很多空间.
在一个查询中合并多个B-树位图索引后,可以使性能显著提高. 位图索引使用固定长度的数据类型要比可变长度的数据类型好. 大的块也会提高对位图索引的存储和读取性能.
建议不要在一些联机事务处理(OLTP)应用程序中使用位图索引. B-树索引的索引值中包含ROWID, 这样oracle就可以在行级别锁上锁定索引. 位图索引被存储为压缩的索引值, 其中包含了一个范围的ROWID. 因此Oracle必须对一个给定值锁定所有范围内的ROWID. 这种锁定可能在某些DML语句中造成死锁.
1.3 HASH索引
1.4 索引编排表
1.5 反转键索引
1.6 基于函数的索引
1.7 分区索引
分区索引(partitional index)就是简单地把一个索引分成多个片段. 通过把一个索引分成多个片段, 您可以访问更小的片段. 并且可以把这些片段分别存储在不同的硬盘上(避免IO问题);
分区索引按照其前导列是否为分区字段可以区分为有前缀的索引和无前缀的索引两种.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |