知识大全 各种索引的结构分析降序索引和位图索引

Posted 索引

篇首语:人生难得几回搏,此时不搏待何时。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 各种索引的结构分析降序索引和位图索引相关的知识,希望对你有一定的参考价值。

  降序索引

  降序索引是 i里面新出现的一种索引 是B*Tree的另一个衍生物 它的变化就是列在索引中的储存方式从升序变成了降序 在某些场合下降序索引将会起作用 举个例子 我们来查询一张表并进行排序

  SQL> select * from test where a beeen and order by a desc b asc;

  已选择 行

  Execution Plan        SELECT STATEMENT Optimizer=CHOOSE (Cost= Card= Bytes= )       SORT(ORDER BY)(Cost= Card= Bytes= )     INDEX (RANGE SCAN) OF IND_BT (NON UNIQUE) (Cost= Card= Bytes= )

  这里优化器首先选择了一个索引范围扫描 然后还有一个排序的步骤 如果使用了降序索引 排序的过程会被取消

  SQL> create index test ind_desc on test testrev(a desc b asc);

  索引已创建

  SQL> analyze index test ind_desc pute statistics;

  索引已分析

  再来看下执行路径

  SQL> select * from test where a beeen and order by a desc b asc;

  已选择 行

  Execution Plan(SQL执行计划 稍后会讲解如何使用)        SELECT STATEMENT Optimizer=CHOOSE (Cost= Card= Bytes= )

     INDEX (RANGE SCAN) OF IND_DESC (NON UNIQUE) (Cost= Card= Bytes= )

  我们看到排序过程消失了 这是因为创建降序索引时Oracle已经把数据都按降序排好了

  另外一个需要注意的地方是要设置init ora里面的patible参数为 或以上 否则创建时desc关键字将被忽略

  位图索引

  位图索引主要用于决策支持系统或静态数据 不支持行级锁定 位图索引最好用于低cardinality列(即列的唯一值除以行数为一个很小的值 接近零) 例如又一个 性别 列 列值有 Male Female Null 等 种 但一共有 万条记录 那么 / 约等于 这种情况下最适合用位图索引

  位图索引可以是简单的(单列)也可以是连接的(多列) 但在实践中绝大多数是简单的 在这些列上多位图索引可以与AND或OR操作符结合使用 位图索引使用位图作为键值 对于表中的每一数据行位图包含了TRUE( ) FALSE( ) 或NULL值 位图索引的位图存放在B Tree结构的页节点中 B Tree结构使查找位图非常方便和快速 另外 位图以一种压缩格式存放 因此占用的磁盘空间比B Tree索引要小得多 位图索引的格式如表 所示

  表   位图索引的格式       行值 Male Female Null

cha138/Article/program/Oracle/201311/18696

相关参考