mysql bitmap index_位图索引:原理(BitMap index)
位图(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)相关推荐
- mysql bitmap index_oracle 位图索引(bitmap index)
今天研究下oracle中的位图索引,通过这边文章你会了解到,什么是位图索引?,什么情况下应该使用位图索引?位图索引的检索数据的过程,以及位图索引的弊端? 一:什么是位图索引? 位图索引是从oracle ...
- 位图索引:原理(BitMap index)
位图(BitMap)索引 1. 案例 有张表名为table的表,由三列组成,分别是姓名.性别和婚姻状况,其中性别只有男和女两项,婚姻状况由已婚.未婚.离婚这三项,该表共有100w个记录.现在有这样的查 ...
- 位图索引(bitmap index)冲突引起的TX锁争用
B*Tree索引的叶节点以排序形式存储索引条目,每个索引条目指向各自的一个rowid.所以唯一键冲突之外,索引条目之间不发生争用.而位图索引的叶节点具有 "column值+start row ...
- 位图索引(Bitmap Index)——位图索引与数据DML锁定
位图索引相对于传统的B*树索引,在叶子节点上采用了完全不同的结构组织方式.传统B*树索引将每一行记录保存为一个叶子节点,上面记录对应的索引列取值和行rowid信息.而位图索引将每个可能的索引取值组织为 ...
- 浅析位图索引(bitmap index)
位图索引基本概念 位图索引是一种很高效的索引结构,对于多属性过滤的聚合查询很高效,玩的就是 bit. 位图:位(bit)的一个简单数组,比如 001010,这个位数就是 6. 位图索引:假如建立在一个 ...
- 位图索引(bitmap index)
位图索引是一种很高效的索引结构,对于多属性过滤的聚合查询很高效,玩的就是 bit. 本文预计阅读时间 3 分钟. 位图索引基本概念 位图:位(bit)的一个简单数组,比如 001010,这个位数就是 ...
- MySQL数据库篇之索引原理与慢查询优化之一
主要内容: 一.索引的介绍 二.索引的原理 三.索引的数据结构 四.聚集索引与辅助索引 五.MySQL索引管理 六.测试索引 七.正确使用索引 八.联合索引与覆盖索引 九.查询优化神器--explai ...
- 【MySQL 面试系列】索引原理
文章目录 一.索引概述 1.索引的定义 2.索引的作用 3.索引的优缺点 二.索引结构 1.概述 2.索引的演进 1.二叉树 2.B-Tree 3.B+Tree 4.Hash 二.索引分类 1.MyS ...
- MySQL修改和删除索引(DROP INDEX)
在 MySQL 中修改索引可以通过删除原索引,再根据需要创建一个同名的索引,从而实现修改索引的操作. 基本语法 当不再需要索引时,可以使用 DROP INDEX 语句或 ALTER TABLE 语句来 ...
最新文章
- ArcGIS水文分析实战教程(9)雨量计算与流量统计
- MySQL删除表数据
- jQuery中$(document).ready()和window.onload的区别
- 一组PHP可逆加密解密算法
- c语言中如何确保一个程序是单例的_c++单例模式
- VC++多线程工作笔记0007---线程间同步机制2
- python 3.6中使用open函数遇见的问题
- [AI-Steering编程]九.路径跟随
- 如何编写yaml格式的Ansible主机清单(inventory)及清单变量使用Demo
- 数仓分层模型架构分享(3)
- 使用c语言实现图像中值滤波,图像处理之中值滤波介绍及C实现
- Android 向联系人名单新加联系人(添加名称和电话号码两项)
- X洛克D烦恼[HDTC-720P.MKV][638MB][国语中英]
- freeBSD的VNET_DEFINE跟SYSCTL_VNET_INT
- 网络关键设备和网络安全专用产品目录
- 攻击 | 破解windows7密码(利用5次shift漏洞破解win7密码)
- Linux下的逻辑卷建立以及磁盘阵列的概念
- 【chrome】模拟微信浏览器
- 小程序----页面配置
- Catia 电吹风壳体设计