zoukankan      html  css  js  c++  java
  • Oracle

    位图索引的适用条件

    位图索引适合只有几个固定值的列,如性别、婚姻状况、行政区等等,而身份证号这种类型不适合用位图索引。

    位图索引适合静态数据,而不适合索引频繁更新的列。

     

    举个例子,有这样一个字段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之后才解锁。

     

    问题: 为什么更新了某个机器的busy值为1,会导致所有busy为1的机器的位图向量发生改变,因此数据库会将busy=1的所有行锁定?

    答案请看位图索引的存储结构。

    位图的存储,位图中位的个数和表中的记录数项目,

    比如下面婚姻状况表

    姓名(Name) 性别(Gender) 婚姻状况(Marital)
    张三 已婚
    李四 已婚
    王五 未婚
    赵六 离婚
    孙七 未婚

    表中有5行记录,所以创建的记录会有5位

    性别列-男的位图: 10100

    性别列-女的位图: 01011

    已婚列的位图: 11000

    未婚列的位图: 11000

    离婚列的位图: 11000

     

    所以现在知道了吧, 当要更新位图索引时,就要更新这个位图,那么将会锁定整个位图或者要更新的这个位所在的块。

  • 相关阅读:
    iOS中的隐式动画
    CALayer 为什么选择 cg 开头 而 不选择 UI 开头
    webStorm中的混乱代码格式化
    html5中的常用的库
    地下城勇士外挂
    开发板的时间设置有效,但重启恢复
    8148
    监控行人检测 .
    Linux设备驱动程序学习之分配内存
    快熟傅里叶算法图之音频wav文件
  • 原文地址:https://www.cnblogs.com/timlong/p/6107919.html
Copyright © 2011-2022 走看看