暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在Oracle中,位图索引是什么?在哪些列上适合创建位图索引?

DB宝 2017-12-02
2142


Q
题目

在Oracle中,位图索引是什么?在哪些列上适合创建位图索引?


     

A
答案


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

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

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

创建位图索引的语法很简单就是在普通索引创建的语法中的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';



DB笔试面试历史连接

http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:618766405

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论