前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试551】在Oracle中,位图索引是什么?

【DB笔试面试551】在Oracle中,位图索引是什么?

作者头像
AiDBA宝典
发布2019-09-29 15:27:40
1.6K0
发布2019-09-29 15:27:40
举报
文章被收录于专栏:小麦苗的DB宝专栏

题目部分

在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语句查询数据库中的所有位图索引:

代码语言:javascript
复制
SELECT * FROM DBA_INDEXES D WHERE D.INDEX_TYPE='BITMAP';

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档