当前位置:网站首页 > 技术博客 > 正文

oracle索引类型有哪些



文章内容来自于位图索引

位图索引(Bitmap Indexes)是一种使用位图的特殊数据库索引。它针对大量相同值的列而创建,例如:类别、型号等。位图索引块的一个索引行中存储的是键值(以比特位0、1的形式存储)和起止ROWID(ROWID的内容可以参考【3.2.28 ROWID和ROWNUM有什么区别?】),以及这些键值的位置编码,位置编码中的每一位表示键值对应的数据行的有无。一个块可能指向的是几十甚至成百上千行数据的位置。

在位图索引中,数据库为每个索引键存储一个位图。在传统的B-Tree索引中,一个索引条目指向单个行,但是在位图索引中,每个索引键存储指向多个行的指针。相对于B-Tree索引,位图索引占用的空间非常小,创建和使用速度非常快。当根据键值查询时,可以根据起始ROWID和位图状态,快速定位数据。当根据键值做AND、OR或IN (X,Y,..)查询时,直接用索引的位图进行或运算,快速得出结果集。当SELECT COUNT(XX)时,可以直接访问索引从而快速得出统计数据。

位图索引与其它索引不同,它不是存储的索引列的列值,而是以比特位0、1的形式存储,所以在空间上它占的空间比较小,相应的一致性查询所使用的数据块也比较小,查询的效率就会比较高。所以,一般应用于即席查询和快速统计条数。由于位图索引本身存储特性的限制,所以,在重复率较低的列或需要经常更新的列上是不适合建立位图索引的。另外,位图索引更新列更容易引起死锁。

创建位图索引的语法很简单,就是在普通索引创建的语法中的INDEX前加关键字BITMAP即可,如下所示:

CREATE BITMAP INDEX IDX_SEX_LHR ON T_USER(SEX);

关于位图索引,需要了解以下几点内容:

① 位图索引适合创建在低基数列(即列值重复率很高)上。

② 适合于决策支持系统(DSS)或OLAP系统。位图索引主要用于数据仓库,或在以特定方式引用很多列的查询环境中。位图索引并不适合许多OLTP应用程序,若使用不当则容易产生死锁。

③ 被索引的表是只读的,或DML语句不会对其进行频繁修改的表。

④ 非常适合OR操作符的查询。

⑤ 位图索引不直接存储ROWID,而是存储字节位到ROWID的映射。

⑥ 减少响应时间。

⑦ 节省空间占用。

⑧ 在同一列上建立位图索引后就不能再建立普通索引了,但是可以建立函数索引,位图索引可以和函数索引同时建立。

⑨ 做UPDATE代价非常高。

⑩ 基于规则的优化器不会考虑位图索引。

⑪ 当执行ALTER TABLE语句并修改包含有位图索引的列时,会使位图索引失效。

⑫ 位图索引不包含任何列数据,并且不能用于任何类型的完整性检查。

⑬ 位图索引不能被声明为唯一索引。

⑭ 位图索引的最大长度为30。

可以使用如下的SQL语句查询数据库中的所有位图索引:

SELECT * FROM DBA_INDEXES D WHERE D.INDEX_TYPE='BITMAP';

版权声明


相关文章:

  • oracle视图的作用能否提高查询效率2024-12-08 20:01:08
  • c udp发送数据2024-12-08 20:01:08
  • autoconfigafter2024-12-08 20:01:08
  • expdp include=table2024-12-08 20:01:08
  • http请求结构有哪几部分组成2024-12-08 20:01:08
  • java单元测试步骤2024-12-08 20:01:08
  • linux抓包教程2024-12-08 20:01:08
  • java内存机制2024-12-08 20:01:08
  • 电脑电子书阅读器软件2024-12-08 20:01:08
  • i2c通信的详细讲解2024-12-08 20:01:08