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

相关推荐

  • 愀怎么读,afternoon怎么读音发音

    技术愀怎么读,afternoon怎么读音发音afternoon 的读音愀怎么读:[ˌɑːftəˈnuːn] 具体解析: afternoon
    英文发音:[ˌɑːftəˈnuːn]
    中文释义:n.下午(中午12点至下午6

    生活 2021年10月21日
  • SQL查询语句怎么写

    技术SQL查询语句怎么写这篇文章主要为大家展示了“SQL查询语句怎么写”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SQL查询语句怎么写”这篇文章吧。查询所有列Select

    攻略 2021年11月11日
  • DG主库忘记force logging情况下insert append了nologgin表操作是怎样的

    技术DG主库忘记force logging情况下insert append了nologgin表操作是怎样的这篇文章给大家介绍DG主库忘记force logging情况下insert append了nologgin表操作是

    攻略 2021年11月30日
  • 如何增加抖音粉丝数量,如何快速增长抖音粉丝?

    技术如何增加抖音粉丝数量,如何快速增长抖音粉丝?抖音快速涨粉方法抖音无疑是目前新媒体里面涨粉最容易,涨粉最快的平台了。前有成都小甜甜一夜涨粉500万,后有灵魂当铺一天涨粉75万。这种涨粉速度在其他平台是想都不敢想象的。不

    测评 2021年11月11日
  • 如何理解Java MeteoInfo解析与绘图代码教程

    技术如何理解Java MeteoInfo解析与绘图代码教程这篇文章主要讲解了“如何理解Java MeteoInfo解析与绘图代码教程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究

    攻略 2021年10月21日
  • 怎么进行MySQL 5.5 MyISAM表锁测试

    技术怎么进行MySQL 5.5 MyISAM表锁测试这篇文章给大家介绍怎么进行MySQL 5.5 MyISAM表锁测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 对于

    攻略 2021年11月16日