位图索引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)

相关推荐

  • 岁寒然后知松柏之后凋也的意思,岁寒然后知松柏之后凋也的作文

    技术岁寒然后知松柏之后凋也的意思,岁寒然后知松柏之后凋也的作文《论语》一书中,有这样一句经典语句:子曰,岁寒,然后知松柏之后凋也。这句话出自《论语·子罕》,意思是:只有天气寒冷了,我们才明白松柏是最后凋谢的岁寒然后知松柏

    生活 2021年10月28日
  • js变量类型和数据类型(js如何判断变量的数据类型)

    技术JS的数据类型和变量指的是什么JS的数据类型和变量指的是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JS的数据类型和变量JavaScript 有六

    攻略 2021年12月14日
  • flex可以对包裹组件起作用吗(flex的事件机制)

    技术Flex事件机制中Flex事件分发和监听的示例分析这篇文章给大家分享的是有关Flex事件机制中Flex事件分发和监听的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是Flex事

    攻略 2021年12月14日
  • flex和flash(flex与flash)

    技术Flex与Flash的关系是什么这篇文章主要介绍Flex与Flash的关系是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Flex简介Flex通常是指AdobeFlex,是最初由Macro

    攻略 2021年12月14日
  • Oracle 12.2 RAC报错ora-600 ora-07445怎么办

    技术Oracle 12.2 RAC报错ora-600 ora-07445怎么办这篇文章主要介绍Oracle 12.2 RAC报错ora-600 ora-07445怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小

    攻略 2021年11月17日
  • antdesignpro使用方法(antdesignpro安装出错)

    技术怎么安装Ant Design Pro这篇文章主要为大家展示了“怎么安装Ant Design Pro”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么安装Ant Desig

    攻略 2021年12月20日