Oracle Bitmap 索引结构、如何存储及其优势
http://docs.oracle.com/cd/B28359_01/server.111/b28318/schema.htm#i7495
本文内容
- 针对数据仓库应用程序的好处(Data Warehousing Applications)
- 基数(Cardinality)
- Bitmap 索引示例
索引的目的是,提供在表中指向包含一个给定键值的数据行。常规索引的实现是,为每个键存储一个对应这些键值数据航的 rowid 列表。Oracle 数据库反复地用已存储的 rowid 存储每个键值。在 Bitmap 索引中,使用每个键值的位图,而不是 rowid 列表。
位图中的每个比特对应一个可能的 rowid。若比特被设置,则意味着相应 rowid 的数据行包含该键值。映射函数可以把比特位转换成一个实际的 rowid,因此,bitmap 索引提供与常规索引相同的功能,即使它内部使用不同的表示。若不同的键值(不重复值)数量较小,则 bitmap 索引非常节省空间。
Bitmap 索引能有效地合并 WHERE 子句中符合很多条件的索引。在访问表本身之前,满足一些,而不是全部条件的行可以被过滤掉。通常会显著提高响应时间。
针对数据仓库应用程序的好处(Data Warehousing Applications)
Bitmap 索引对数据仓库应用程序很有好处。数据仓库应用程序具有大量数据和 ad hoc 查询,但却是低水平的并发事务。对这样的应用程序,Bitmap 索引提供:
- 为大量 ad hoc 查询减少响应时间
- 与其他索引技术相比,大幅度减少了使用空间
- 即使在很低端的硬件上也能获得显著的性能
- 非常有效的并行 DML 和负载
用 B-tree 索引全面索引一个大表在空间上可能非常昂贵,因为,索引可能比表中的数据大很多倍。Bitmap 索引通常只有表中已索引数据大小的一部分。
Bitmap 索引不适合具有大量并发事务、修改数据的 OLTP 应用程序。该索引主要用于在数据仓库应用程序中的决策支持,这些用户通常都是查询,而不是更新。
Bitmap 索引也不适于用小于或大于比较查询的那些列。例如,salary 列,它出现在 WHERE 子句与某个值比较用 B-tree 索引最好。bitmap 索引只对等值查询很有用,特别是结合 AND、OR 和 NOT 运算符。
Bitmap 索引与 Oracle 数据库优化器和执行引擎集成。它们可以无缝地与其他 Oracle 数据库的执行方法结合使用。例如,优化器可以决定在两个之间执行一个 hash 连接,一个表使用 Bitmap 索引,而另一个使用常规 B-tree 索引。优化器会将考虑 Bitmap 索引和其他可用的访问方法,如常规 B-tree 索引和全表扫描,并选择最有效的方法,在适当情况下考虑并行。
用 bitmap 索引并行查询和并行 DML 与传统索引一样。分区表上的 bitmap 索引必须是本地索引。还支持并行创建索引和连接索引。
基数(Cardinality)
在低基数列上使用 bitmap 索引能获得最大的优势:也就是说,列上不重复值的数量与表中行数相比很小。若一个列不重复值的数量小于表中行数的 1%,或一个列中的值重复超过 100 次以上,则可以考虑为该列创建 bitmap 索引。如果列涉及复杂查询,即使该列具有低重复,高基数,也可以创建 bitmap 索引。
例如,一个有 100 万行的表,某个列具有 10000 个不重复的值,那么就可以为该列创建 bitmap 索引。该列的 bitmap 索引性能会超过 B-tree 索引,特别是当该列通常与其他列连接查询。
B-tree 索引对于高基数列最有效:也就是说,数据具有很多可能值,例如 CUSTOMER_NAME 或 PHONE_NUMBER 这样的列。在某些情况下,一个B-tree 索引会比已索引的数据大。若适当使用,bitmap 索引会显著比相应的 B-tree 索引小。
在 ad hoc 查询和类似情况下,bitmap 索引可以显著提高查询性能。AND 和 OR 条件,在把结果 bitmap 转换成 rowid 前,通过在 bitmap 索引上执行相应的布尔操作,可以被快速解析。如果结果行数较小,那么查询会很快返回,无需全表扫描。
Bitmap 索引示例
表 1 是 customer 表的部分数据。
表 1 Bitmap 索引示例
CUSTOMER # |
MARITAL_ STATUS |
REGION |
GENDER |
INCOME_ LEVEL |
101 |
single |
east |
male |
bracket_1 |
102 |
married |
central |
female |
bracket_4 |
103 |
married |
west |
female |
bracket_2 |
104 |
divorced |
west |
male |
bracket_4 |
105 |
single |
central |
female |
bracket_2 |
106 |
married |
central |
female |
bracket_3 |
MARITAL_STATUS、REGION、GENDER 和 INCOME_LEVEL 都是低基数列。MARITAL_STATUS 和 REGION 列只有三个可能的值;GENDER 是两个;INCOME_LEVEL 有四个。因此,在这些列上创建 bitmap 索引很合适。不能在 CUSTOMER# 列创建 bitmap 索引,因为,该列是高基数列。相反,在该列上使用唯一 B-tree 索引更有效的。
图 2 说明 REGION 列上的 bitmap 索引。它由三个独立位图组成,每个区域是位图中的一个。
REGION='east' |
REGION='central' |
REGION='west' |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
位图中的每个条目或比特对应 CUSTOMER 表的一行。每个比特位的值取决于表中对应行的值。例如,位图 REGION='east' 包含一个,第一个比特位为 1。这是因为它是 CUSTOMER 表的第一行。位图 REGION='east' 其他比特位为 0,这是因为表中没有其他行为 east。
一位调查人口的分析师,可以问,“我们已婚客户中有多少人居住在中部或西部区域?”,相当于下面 SQL:
SELECT COUNT(*) FROM CUSTOMER
WHERE MARITAL_STATUS = 'married' AND REGION IN ('central','west');
Bitmap 索引可以高效处理这个查询,如下图所示。若确定满足条件的员工,可以使用如下结果位图来访问表:
图 1 使用 Bitmap 索引执行查询
说明:图 1 的计算过程就是相应的比特位做运算。
Bitmap 索引和 Nulls
不同于其他大多数索引类型,Bitmap 索引可以包含 NULL 值的那些行。null 索引对于某些 SQL 语句很有用,例如用聚合函数 COUNT 查询。
分区表上的 Bitmap 索引
像其他索引,你在分区表上创建 bitmap 索引。唯一的限制是 bitmap 索引必须是对本地的分区表——它们不能使全局索引。全局 bitmap 索引只被非非分区表支持。
参考资料
Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——1-5
Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——2-5
Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——3-5
Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——4-5
Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——5-5
Oracle 比较 B-tree 和 Bitmap 索引
转载于:https://www.cnblogs.com/liuning8023/archive/2012/11/18/2776127.html
Oracle Bitmap 索引结构、如何存储及其优势相关推荐
- oracle rowed,oracle bitmap索引内部揭密,欢迎补充
位图(bitmap)索引是另外一种索引类型,它的组织形式与B树索引相同,也是一棵平衡树.与B树索引的区别在于叶子节点里存放索引条目的方式不同.从前面我们知道,B树索引的叶子节点里,对于表里的每个数据行 ...
- oracle物理索引结构,oracle学习笔记(6)oracle物理结构--索引
1.索引(index):索引是为了提高数据检索的性能而建立的,利用它可快速的确定指定的信息.索引分为:B-Tree Index(最常用).全局或局部索引.位图索引(Bitmap Index).函数索引 ...
- Mysql 索引 总结 —— 概述 || 索引优势劣势|| 索引结构(索引是在MySQL的存储引擎层中实现的)|| BTREE 结构||B+TREE 结构||MySQL中的B+Tree||索引分类
索引概述 MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序). 在数据之外,数据库系统还维护者满足特定查找算法的数据结构, 这些数据结构以某种方式引用(指向 ...
- mysql支持非关系_说下oracle、mysql、非关系型数据库中的索引结构?
谢邀~~树懒君悉心整理了一篇索引结构方面的内容,跟各位知友分享分享~ Oracle 索引的数据结构:B-TreeOracle 数据库使用 B-trees 存储索引,来加速数据访问.若没有索引,你必须顺 ...
- Java 培训 MySQL 体系构架、存储引擎和索引结构
对某项技术进行系统性的学习,始终离不开对该项技术的整体认知.只有领略其全貌,方可将各块知识点更好的串联起来.为了进一步理解和学习 MySQL,我们有必要了解一下 MySQL 的体系构架.存储引擎和索引 ...
- Oracle索引结构
BTREE索引 索引是建立在是表的具体列上的,其存在的目的是让表的查询变得更快,效率更高.表的记录丢失关乎生死,索引丢失只需要重建即可. 由图可知,索引是由Root(根块).Branch(茎块)和Le ...
- mysql默认存储引擎的索引结构是_InnoDB引擎的索引和存储结构
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的. 而MySql数据库提供了多种存储引擎.用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根 ...
- Oracle数据库系统结构一(存储结构)
1.Oracle数据库系统结构概述 Oracle数据库由存放在磁盘上的数据库(DB)和对磁盘上的数据库进行管理的数据库管理系统(DBMS)两部分构成,分别对应着数据库的存储结构和软件结构. Orac ...
- oracle位图索引和普通索引区别,【索引】Bitmap位图索引与普通的B-Tree索引锁的比较...
通过以下实验,来验证Bitmap位图索引较之普通的B-Tree索引锁的"高昂代价".位图索引会带来"位图段级锁",实际使用过程一定要充分了解不同索引带来的锁代价 ...
最新文章
- 稀疏自编码器及TensorFlow实现
- Hugging Face官方NLP课程来了!Transformers库维护者之一授课,完全免费
- 行将消失的烧瓦匠人:“仿古”热潮下迎新生曙光
- Java——容器(Set)
- Instance and Media Recovery Structures
- 问题 F: 积木大赛(模拟)
- - The superclass javax.servlet.http.HttpServlet was not found on the Java
- SQL Server 中的case when then else 中的结果类型
- 计算机基础类报刊,全国“xx杯”计算机应用基础类说课大赛优秀作品:图文表混排-制作感恩报刊说课课件...
- ue设置MySQL_MySQL的安装与配置——详细教程 - Winton-Q
- MOOC 数据结构 第九周 树与二叉树(下)
- 【计算方法】牛顿插值法
- WPS如何在同一篇文档针对不同章节设置不同的页眉页脚
- The C++ Frontend
- 荧光微球激发光谱图/橙色荧光微球/绿色荧光微球/氨基红色荧光微球/氨基橙色荧光微球
- 诊所数字化:患者信息识别方式
- 【顶】(与同事合作的快乐)技术人员也需要先学会做人,再学会做事,再是能成事,最后是成名得利...
- 阿里云服务器ECS装好宝塔 但访问不了面板的解决方法
- 学习笔记——Jupyter notebook快速入门教程
- 使用Feed43为网页生成RSS订阅源
热门文章
- Java编程中“为了性能”尽量要做到的一些地方 [转]
- 【转】Tag的创建和组织
- linux服务器进虚拟机,初次登录 Linux 服务器马上要做的 9 件事|Linux 中国
- 如何在Hadoop中控制MapReduce任务的数量
- (96)FPGA时序违规案例(一)
- (119)System Verilog 父类与子类对象复制(自定义函数)详解
- (137)FPGA面试题-Verilog HDL中function和task的区别(一)
- (36)FPGA打N拍设计(第8天)
- (51)Verilog HDL上升沿检测
- 查看函数说明_Axure函数使用说明