首页 > 数据库 >在Oracle中,位图索引是什么?在哪些列上适合创建位图索引?

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

时间:2023-01-03 15:12:06浏览次数:57  
标签:存储 哪些 创建 查询 索引 键值 ROWID 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';

标签:存储,哪些,创建,查询,索引,键值,ROWID,Oracle
From: https://www.cnblogs.com/lvaihui/p/17022284.html

相关文章

  • ORACLE 创建job定时执行带参数的存储过程/无参数的存储过程
    1、创建一张测试表createtableperson( nameVARCHAR2(500));2、创建存储过程(往person表中插入人名)PROCEDUREINSERTPERSON(nameINVARCHAR2)ASBEGIN --TODO:PRO......
  • 应用工业以太网交换机有哪些好处?
    什么是工业以太网交换机?工业以太网交换机,是在工业环境中开展连续不断数据传输的必备工具,它在安装及配置上十分方便快捷。工业网络交换机的显著特点是坚固耐用,此外它对于高速......
  • 进程间通讯有哪些方式
    进程间通信(inter-processcommunication或interprocesscommunication,简写IPC)是指两个或两个以上进程(或线程)之间进行数据或信号交互的技术方案。文件没错,文件就是......
  • oracle spool命令
    转:http://blog.itpub.net/14683446/viewspace-670334spool命令示例:以下保存为SQL脚本,在SQLPlus中运行setechooffsettimingoff   --关闭返回执行时间sethead......
  • 服务器有哪些用途
    1、外贸网站与电子商务平台企业可以通过租用服务器,在服务器上建立网站或博客、电子商务平台等,不仅安全好用,而且性价比也是很高的。可以通过服务器提供网站访问,不仅访问......
  • Mysql为什么用B+树做索引而不用B-树或红黑树?
    一、概述B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。所以从Mysql(Inoodb)的角度来看,B+树是用来充当索引的,一般来说索引非常大,尤其是关系性数......
  • Oracle设置密码永不过期
    【Oracle密码过期解决办法】1.在CMD下以sqlplus/assysdba登陆数据库2.设置密码永不过期运行语句ALTERPROFILEDEFAULTLIMITPASSWORD_LIFE_TIMEUNLIMITED;3......
  • React中组件之间是如何通信的 react的组件通信方式有哪些
    一、是什么通信指的是发送者通过某种媒体以某种格式来传递信息到收信者以达到某个目的,广义上,任何信息的传递都是通信二、如何通信?组件传递的方式有很多种,根据传送......
  • NumPy科学计算库学习_008_NumPy数组的花式索引和索引技巧
    1维NumPy数组创建1维NumPy数组arr=np.array([0,10,3,8,24,5,18,2,99,66])print("【arr】\n",arr)【arr】[010382451829966]从1维NumPy数组中挑选......
  • NumPy科学计算库学习_007_NumPy数组的基本索引和切片
    导入模块importnumpyasnp一维数组切片创建一个NumPy数组arr=np.array([0,1,2,3,4,5,6,7,8,9])print("【arr】\n",arr)【arr】[0123456789]从Num......