位图(BitMap)索引

前段时间听同事分享,偶尔讲起Oracle数据库的位图索引,顿时大感兴趣。说来惭愧,在这之前对位图索引一无所知,因此趁此机会写篇博文介绍下位图索引。

1. 案例

有张表名为table的表,由三列组成,分别是姓名、性别和婚姻状况,其中性别只有男和女两项,婚姻状况由已婚、未婚、离婚这三项,该表共有100w个记录。现在有这样的查询:     select * from table where Gender=‘男’ and Marital=“未婚”;

姓名(Name)

性别(Gender)

婚姻状况(Marital)

张三

已婚

李四

已婚

王五

未婚

赵六

离婚

孙七

未婚

...

...

...

1)不使用索引

不使用索引时,数据库只能一行行扫描所有记录,然后判断该记录是否满足查询条件。

2)B树索引

对于性别,可取值的范围只有'男','女',并且男和女可能各站该表的50%的数据,这时添加B树索引还是需要取出一半的数据, 因此完全没有必要。相反,如果某个字段的取值范围很广,几乎没有重复,比如身份证号,此时使用B树索引较为合适。事实上,当取出的行数据占用表中大部分的数据时,即使添加了B树索引,数据库如oracle、mysql也不会使用B树索引,很有可能还是一行行全部扫描。

2. 位图索引出马

如果用户查询的列的基数非常的小, 即只有的几个固定值,如性别、婚姻状况、行政区等等。要为这些基数值比较小的列建索引,就需要建立位图索引。

对于性别这个列,位图索引形成两个向量,男向量为10100...,向量的每一位表示该行是否是男,如果是则位1,否为0,同理,女向量位01011。

RowId

1

2

3

4

5

...

1

0

1

0

0

0

1

0

1

1

对于婚姻状况这一列,位图索引生成三个向量,已婚为11000...,未婚为00100...,离婚为00010...。

RowId

1

2

3

4

5

...

已婚

1

1

0

0

0

未婚

0

0

1

0

1

离婚

0

0

0

1

0

当我们使用查询语句“select * from table where Gender=‘男’ and Marital=“未婚”;”的时候 首先取出男向量10100...,然后取出未婚向量00100...,将两个向量做and操作,这时生成新向量00100...,可以发现第三位为1,表示该表的第三行数据就是我们需要查询的结果。

RowId

1

2

3

4

5

1

0

1

0

0

and

未婚

0

0

1

0

1

结果

0

0

1

0

0

3.位图索引的适用条件

上面讲了,位图索引适合只有几个固定值的列,如性别、婚姻状况、行政区等等,而身份证号这种类型不适合用位图索引。

此外,位图索引适合静态数据,而不适合索引频繁更新的列。举个例子,有这样一个字段busy,记录各个机器的繁忙与否,当机器忙碌时,busy为1,当机器不忙碌时,busy为0。

这个时候有人会说使用位图索引,因为busy只有两个值。好,我们使用位图索引索引busy字段!假设用户A使用update更新某个机器的busy值,比如update table set table.busy=1 where rowid=100;,但还没有commit,而用户B也使用update更新另一个机器的busy值,update table set table.busy=1 where rowid=12; 这个时候用户B怎么也更新不了,需要等待用户A commit。

原因:用户A更新了某个机器的busy值为1,会导致所有busy为1的机器的位图向量发生改变,因此数据库会将busy=1的所有行锁定,只有commit之后才解锁。

Oracle索引——位图索引

1.语法create bitmap index index_name on 表名(字段);2.举个例子你就能明白了:如有表 test(id,name,address)数据(1,张三,大连)(2,李四, ...

oracle索引原理

B-TREE索引(二叉树索引,默认情况下,我们建的索引都是此种类型) 一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点.可以用下图一来描述B树索引的结构.其中,B表示分支节点,而L表示叶 ...

[转帖]B树索引和位图索引的结构介绍

B树索引和位图索引的结构介绍 http://blog.itpub.net/12679300/viewspace-1174236/ 一  前言:? ROWID:包含键值的行的行ID,(查找块的最快方法, ...

Oracle 位图索引

内容简介: 1.位图索引 1.1位图索引使用注意事项; 1.2 使用位图索引; 1.3 位图索引对DML操作的影响; 2.位图连接索引 2.1 明确需求后使用位图索引; 2.1创建位图连接索引的注意事 ...

位图索引(Bitmap Index)的故事

您如果熟悉Oracle数据库,我想您对Thomas Kyte的大名一定不会陌生.Tomas主持的asktom.oracle.com网站享誉Oracle界数十年,绝非幸致.最近在图书馆借到这位Oracl ...

【Bitmap Index】B-Tree索引与Bitmap位图索引的锁代价比较研究

通过以下实验,来验证Bitmap位图索引较之普通的B-Tree索引锁的“高昂代价”.位图索引会带来“位图段级锁”,实际使用过程一定要充分了解不同索引带来的锁代价情况. 1.为比较区别,创建两种索引类型 ...

Oracle分区表之分区范围扫描(PARTITION RANGE ITERATOR)与位图范围扫描(BITMAP INDEX RANGE SCAN)

一.前言: 一开始分区表和位图索引怎么会挂钩呢?可能现实就是这么的不期而遇:比如说一张表的字段是年月日—‘yyyy-mm-dd’,重复率高吧,适合建位图索引吧,而且这张表数据量也不小,也适合转换成分区 ...

oracle索引原理(b-tree,bitmap,聚集,非聚集索引)

B-TREE索引 一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点. 可以用下图一来描述B树索引的结构.其中,B表示分支节点,而L表示叶子节点. 对于分支节点块(包括根节点块)来说,其所 ...

( 转 ) 数据库BTree索引、Hash索引、Bitmap位图索引的优缺点

测试于:MySQL 5.5.25 当前测试的版本是Mysql 5.5.25只有BTree和Hash两种索引类型,默认为BTree.Oracle或其他类型数据库中会有Bitmap索引(位图索引),这里作 ...

随机推荐

Python---MySQL相关操作

MySQL数据库操作 显示数据 SHOW DATABASES; #默认数据库: #mysql - 用户权限相关数据 #test - 用于用户测试数据 #information_schema - MyS ...

原来现在很多人都用SignalR来实现Chat Room

今天从一个业余开发的群里,看到有人要求这样一个项目需求: 1,)学员可以通过在线课堂找到自己喜欢的老师和课程. 2,)每个人可以建立自己课堂,每个课堂扣分多个子房间,交流群.设置管理员:有录音功能,可 ...

MYSQL数据库错误代码提示汇总

Mysql出错代码表 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败 1 ...

[Apache Maven Shade Plugin] [example] [001] 官方例子:includes-excludes

链接地址:[Selecting Contents for Uber JAR](http://maven.apache.org/plugins/maven-shade-plugin/examples/i ...

HelloCharts pie饼图绘制

先引用hellocharts-library-.jar 然后在layout中设置

jQuery获取url参数值

$.extend({ getUrlVars: function () { var vars = [], hash; var hashes = window.location.href.slice(wi ...

SQL SERVER大话存储结构(3)_数据行的行结构

一行数据是如何来存储的呢?     变长列与定长列,NULL与NOT NULL,实际是如何整理存放到 8k的数据页上呢?     对表格进行增减列,修改长度,添加默认值等DDL SQL ...

linux命令之kill篇

作业四:查询firewall进程,然后杀死 [root@localhost 桌面]# ps -aux |grep firewall root        772  0.0  2.0 327912 2 ...

(转)关于linux挂载window下共享文件

关于linux挂载window下共享文件的方法: ①事先建立linux下文件夹,例如“ /mnt/linux-folder”②用mount命令挂载    mount -o username=windo ...

mysql bitmap index_位图索引:原理(BitMap index)相关推荐

  1. mysql bitmap index_oracle 位图索引(bitmap index)

    今天研究下oracle中的位图索引,通过这边文章你会了解到,什么是位图索引?,什么情况下应该使用位图索引?位图索引的检索数据的过程,以及位图索引的弊端? 一:什么是位图索引? 位图索引是从oracle ...

  2. 位图索引:原理(BitMap index)

    位图(BitMap)索引 1. 案例 有张表名为table的表,由三列组成,分别是姓名.性别和婚姻状况,其中性别只有男和女两项,婚姻状况由已婚.未婚.离婚这三项,该表共有100w个记录.现在有这样的查 ...

  3. 位图索引(bitmap index)冲突引起的TX锁争用

    B*Tree索引的叶节点以排序形式存储索引条目,每个索引条目指向各自的一个rowid.所以唯一键冲突之外,索引条目之间不发生争用.而位图索引的叶节点具有 "column值+start row ...

  4. 位图索引(Bitmap Index)——位图索引与数据DML锁定

    位图索引相对于传统的B*树索引,在叶子节点上采用了完全不同的结构组织方式.传统B*树索引将每一行记录保存为一个叶子节点,上面记录对应的索引列取值和行rowid信息.而位图索引将每个可能的索引取值组织为 ...

  5. 浅析位图索引(bitmap index)

    位图索引基本概念 位图索引是一种很高效的索引结构,对于多属性过滤的聚合查询很高效,玩的就是 bit. 位图:位(bit)的一个简单数组,比如 001010,这个位数就是 6. 位图索引:假如建立在一个 ...

  6. 位图索引(bitmap index)

    位图索引是一种很高效的索引结构,对于多属性过滤的聚合查询很高效,玩的就是 bit. 本文预计阅读时间 3 分钟. 位图索引基本概念 位图:位(bit)的一个简单数组,比如 001010,这个位数就是 ...

  7. MySQL数据库篇之索引原理与慢查询优化之一

    主要内容: 一.索引的介绍 二.索引的原理 三.索引的数据结构 四.聚集索引与辅助索引 五.MySQL索引管理 六.测试索引 七.正确使用索引 八.联合索引与覆盖索引 九.查询优化神器--explai ...

  8. 【MySQL 面试系列】索引原理

    文章目录 一.索引概述 1.索引的定义 2.索引的作用 3.索引的优缺点 二.索引结构 1.概述 2.索引的演进 1.二叉树 2.B-Tree 3.B+Tree 4.Hash 二.索引分类 1.MyS ...

  9. MySQL修改和删除索引(DROP INDEX)

    在 MySQL 中修改索引可以通过删除原索引,再根据需要创建一个同名的索引,从而实现修改索引的操作. 基本语法 当不再需要索引时,可以使用 DROP INDEX 语句或 ALTER TABLE 语句来 ...

最新文章

  1. ArcGIS水文分析实战教程(9)雨量计算与流量统计
  2. MySQL删除表数据
  3. jQuery中$(document).ready()和window.onload的区别
  4. 一组PHP可逆加密解密算法
  5. c语言中如何确保一个程序是单例的_c++单例模式
  6. VC++多线程工作笔记0007---线程间同步机制2
  7. python 3.6中使用open函数遇见的问题
  8. [AI-Steering编程]九.路径跟随
  9. 如何编写yaml格式的Ansible主机清单(inventory)及清单变量使用Demo
  10. 数仓分层模型架构分享(3)
  11. 使用c语言实现图像中值滤波,图像处理之中值滤波介绍及C实现
  12. Android 向联系人名单新加联系人(添加名称和电话号码两项)
  13. X洛克D烦恼[HDTC-720P.MKV][638MB][国语中英]
  14. freeBSD的VNET_DEFINE跟SYSCTL_VNET_INT
  15. 网络关键设备和网络安全专用产品目录
  16. 攻击 | 破解windows7密码(利用5次shift漏洞破解win7密码)
  17. Linux下的逻辑卷建立以及磁盘阵列的概念
  18. 【chrome】模拟微信浏览器
  19. 小程序----页面配置
  20. Catia 电吹风壳体设计

热门文章

  1. Python绘图库:Matplotlib入门教程
  2. python-认识(第五段-函数)
  3. 机器学习在学生成绩预测模型上的应用
  4. c语言音频信号频谱分析,音频信号频谱分析(正文)-副本.pdf
  5. PPT文件不能编辑如何解决?
  6. win 连续截图功能(PSR 屏幕录制)
  7. HyperV修改分辨率
  8. PHPAdmin数据类型
  9. 【多元统计分析】09.独立性检验与正态性检验
  10. float 精度探究