位图索引

作者: woshishui1243 | 来源:发表于2018-05-22 16:25 被阅读89次
  1. 案例
      有张表名为table的表,由三列组成,分别是姓名、性别和婚姻状况,其中性别只有男和女两项,婚姻状况由已婚、未婚、离婚这三项,该表共有100w个记录。现在有这样的查询: select * from table where Gender=‘男’ and Marital=“未婚”;


    image.png

1)不使用索引

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

2)B树索引

对于性别,可取值的范围只有'男','女',并且男和女可能各站该表的50%的数据,这时添加B树索引还是需要取出一半的数据, 因此完全没有必要。相反,如果某个字段的取值范围很广,几乎没有重复,比如身份证号,此时使用B树索引较为合适。事实上,当取出的行数据占用表中大部分的数据时,即使添加了B树索引,数据库如oracle、mysql也不会使用B树索引,很有可能还是一行行全部扫描。

  1. 位图索引出马
    位图索引创建了之后,生成是位图数据可以这么理解,比如,男女两种,然后一共八条数据,那么就生产两个字符串,一个代表男,一个代表女,字符串长度为数据的总数量,字符串的值:第一位(如果第一条数据是男那么就是1,如果不是就0),第二位,第三位,往后都是这样。由此就生成了长度为总数量,只包含01的字符串,通过这个字符串就能知道第几条数据是男,第几条不是男,同理,另外一条代表女的字符串也一样,是女的就1,不是女的就0。

如果用户查询的列的基数非常的小, 即只有的几个固定值,如性别、婚姻状况、行政区等等。要为这些基数值比较小的列建索引,就需要建立位图索引。

对于性别这个列,位图索引形成两个向量,男向量为10100...,向量的每一位表示该行是否是男,如果是则位1,否为0,同理,女向量位01011。


image.png

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


image.png

当我们使用查询语句“select * from table where Gender=‘男’ and Marital=“未婚”;”的时候 首先取出男向量10100...,然后取出未婚向量00100...,将两个向量做and操作,这时生成新向量00100...,可以发现第三位为1,表示该表的第三行数据就是我们需要查询的结果。

image.png

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

相关文章

  • 《数据库系统概念》16-位图索引和查询处理

    一、位图索引 位图索引(bitmap indices)是一种专为多个键的简单查询而设计的。应用位图索引的前提是记录...

  • 位图索引

    案例有张表名为table的表,由三列组成,分别是姓名、性别和婚姻状况,其中性别只有男和女两项,婚姻状况由已婚、未婚...

  • 第二章 定义和构建索引(三)

    第二章 定义和构建索引(三) 位图索引 位图索引是一种特殊类型的索引,它使用一系列位串来表示与给定索引数据值相对应...

  • 索引及分区表5

    一、索引 索引的目的: 索引的类型: 1、Btree索引: 2、位图索引: 3、全文索引:就是模糊查询,解决模糊查...

  • redis bitmap

    位图 API setbit key offset value 给位图指定索引设置值image.png getbit...

  • 位图索引-bitmap

    位图索引原理:https://www.cnblogs.com/LBSer/p/3322630.html 表现形式:...

  • Android 内存优化之索引颜色位图(上)

    什么是索引颜色位图? 位图(Bitmap)最常见的编码方式是 RGBA 颜色编码(又叫直接颜色编码),即通过红、绿...

  • 位图索引&布隆过滤器

    位图索引 位图法就是Bitmap的缩写。所谓Bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态...

  • 轻松获得PNG文件

    PNG文件,全称:Portable Network Graphics,是一种无损压缩的位图图形格式,支持索引、灰度...

  • 海量数据处理面试题

    1、常见海量数据处理方法 hash、bit-map(位图法)、bllomfilter、数据库优化、倒排索引、外排序...

网友评论

    本文标题:位图索引

    本文链接:https://www.haomeiwen.com/subject/wnfkjftx.html