位图索引BitMap举例分析

技术位图索引BitMap举例分析这篇文章主要介绍“位图索引BitMap举例分析”,在日常操作中,相信很多人在位图索引BitMap举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”位图索

本文主要介绍“位图索引的实例分析”。在日常操作中,相信很多人对BitMap Index的实例分析有所怀疑。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮你解答“位图索引实例分析”的疑惑!接下来,请和边肖一起学习!

00-1010有一个名为table的表,由姓名、性别、婚姻状况三列组成,其中只有两种性别,婚姻状况有三种,分别是已婚、未婚、离异。此表中有100条记录。现在有这样一个查询:从表中选择*其中性别='男性',婚姻状况='未婚';

姓名(Name)

性别(Gender)

婚姻状况(Marital)

张三

男人

已婚的

Lisi

妇女

已婚的

王武

男人

未婚

刘钊

妇女

离婚

孙棋

妇女

未婚

...

...

...

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

2.b树索引

就性别而言,理想值的范围只有“男性”和“女性”,男性和女性各占本表数据的50%。此时添加B-tree索引还是需要取出一半的数据,完全没有必要。相反,如果某个字段的取值范围很广,几乎没有重复,比如身份证号,此时使用B树索引较为合适.事实上,当提取的行数据占据了表中的大部分数据时,即使添加了B-tree索引,oracle和mysql等数据库也不会使用B-tree索引,很可能所有的行都会被扫描。

1. 案例

如果用户查询的列基数很小,也就是只有几个固定值,比如性别、婚姻状况、行政区域等等。要用小的基值索引这些列,有必要建立位图索引。

对于性别列,位图索引形成两个向量,男性向量为10100.并且向量的每个比特指示该行是否是男性;如果是,则为位1,否为0;类似地,母向量是比特01011。

RowId

1

2

3

4

5

...

男人

一个

0

一个

0

0

妇女

0

一个

0

一个

一个

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

RowId

1

2

g>

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...,将两个向量做与操作,这时生成新向量00100...,可以发现第三位为1,表示该表的第三行数据就是我们需要查询的结果。 

RowId

1

2

3

4

5

1

0

1

0

0

&

 

 

 

 

 

未婚

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之后才解锁。

到此,关于“位图索引BitMap举例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/137957.html

(0)

相关推荐

  • idea怎么删除项目,idea怎么恢复默认设置

    技术idea怎么删除项目,idea怎么恢复默认设置平时我们在使用idea的时候idea怎么删除项目,想把自己的设置恢复成默认设置,怎么恢复呢,下面来分享一下方法。1、第一步我们可以删除idea的settings设置来恢复

    生活 2021年10月29日
  • qq空白昵称代码复制,王者荣耀战队名空白代码

    技术qq空白昵称代码复制,王者荣耀战队名空白代码在王者荣耀中显示空白名字的原理的是输入一些游戏无法显示的字符即可qq空白昵称代码复制,所以想取空白名字只要输入一些奇葩字符就可以了。不过王者荣耀最新官方规定游戏中不能出现空

    生活 2021年10月30日
  • socket编程中常用协议有哪些

    技术socket编程中常用协议有哪些这篇文章给大家分享的是有关socket编程中常用协议有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.ip IP协议是将多个包交换网络连接起来,它在源

    攻略 2021年11月17日
  • 英文大小写26个字母,二十六个字母大小写及音标是

    技术英文大小写26个字母,二十六个字母大小写及音标是一英文大小写26个字母、26个英文字母的大写字母 A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P、Q、R、S、T、U、V、W、X、Y、Z。
    二、26个

    生活 2021年10月24日
  • Redis数据结构中的String类型有哪些

    技术Redis数据结构中的String类型有哪些这篇文章主要介绍“Redis数据结构中的String类型有哪些”,在日常操作中,相信很多人在Redis数据结构中的String类型有哪些问题上存在疑惑,小编查阅了各式资料,

    攻略 2021年12月10日
  • spark环境搭建

    技术spark环境搭建 spark环境搭建spark环境搭建
    spark下载地址:http://archive.apache.org/dist/spark/
    Scala下载地址:https://scal

    礼包 2021年11月9日