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

相关推荐

  • Ubuntu20.04如何安装wxWidgets-3.1.3

    技术Ubuntu20.04如何安装wxWidgets-3.1.3这篇文章主要介绍了Ubuntu20.04如何安装wxWidgets-3.1.3,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获

    攻略 2021年11月15日
  • 28Django-接入支付宝3,前置基础准备工作)

    技术28Django-接入支付宝3,前置基础准备工作) 28Django-接入支付宝3(前置基础准备工作)一,先本地跑通基础逻辑:
    点打赏按钮后,页面实现跳转
    1新创建一个项目:D:\PycharmPr

    礼包 2021年12月20日
  • 怎么在网上买鞋,怎样在网络上买到好品质的鞋子

    技术怎么在网上买鞋,怎样在网络上买到好品质的鞋子选择靠谱的网站:假若去淘宝买的话怎么在网上买鞋,不光要选择信誉高的店铺,还要看该店铺买家的评论,是否可以退换,卖家是否加入消保等。不能过于追求低价:在网上销售鞋的很多,但真

    生活 2021年10月30日
  • 二年级上册竖式计算题100道,200道小学二年级计算题

    技术二年级上册竖式计算题100道,200道小学二年级计算题竖式计算二年级上册竖式计算题100道。 (1)4×5     (2)54÷9 (3)42-28     (4)45÷6 (5)50÷8     (6)35+

    生活 2021年10月30日
  • TokuDB安装及注意事项有哪些

    技术TokuDB安装及注意事项有哪些这篇文章将为大家详细讲解有关TokuDB安装及注意事项有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。TokuDB的特点:1、高压缩比,官方宣称

    攻略 2021年11月6日
  • 怎么编写Prometheus配置文件prometheus.yml

    技术怎么编写Prometheus配置文件prometheus.yml小编给大家分享一下怎么编写Prometheus配置文件prometheus.yml,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!默认情

    攻略 2021年11月21日