B树索引是所有大型关系数据库毕用的技术,也是oracle数据库默认的索引技术。
基数:指的是你要创建索引的列中所包含的不同键值的数量。例如我们的列是性别,那么它的键值就是男、女所以你的索引基数是2.
oracle中每个表的行都有一个rowid,用于标记这个行在数据库中的位置。
关于索引:
B-TREE索引,结构如下:
root
/ | \
branch1 ........
/|\ ......................
leaf1......
leaf节点的结构是这样的:
|索引头|列长度|列内容|rowid(s)|
一个叶子节点的大小大概是8192*8bit,因此一个字段的长度即使是50,那么一个节点大概能分成100个子节点,那么100万的记录,也只需要3级节点即可索引完毕,因此一般b-tree的深度不超过4级,这样根据b-tree来查找一条记录,最多只需遍历4个节点找到rowid,再根据rowid查找磁盘即可得到最终记录数据。
对某列查询的结果集记录数如果通常都小于7%,则应该在该列添加索引。对b-tree来说,where xx is null条件是不会利用索引的,因此建议这种列应该设置默认值,以避免该列的值存在null的情况,同样group by 中如果该列有null索引也可能无效。
bitmap索引:
bitmap索引的结构也是树形结构,但是叶子节点的结构与b-tree不一样。bitmap叶子节点的结果大概如下:
<key1 start-rowid end-rowid bitmap>
<key2 start-rowid end-rowid bitmap>
......
其中bitmap的内容是110010100011100001这样的01组合形式,它的长度与start-rowid和end-rowid之间包含的rowid数量一致。这样假设范围内第9个rowid对应列的内容是key1,那么kei1对应的bitmap中第9个字符的值就是1,否则就是0。同样每个块的大小是8192*8,那么一个bitmap索引的叶子节点大概能索引10000条记录。
bitmap索引对null的字段依然有效,具体null的值在bitmap中是取0还是专门有个keyX的值是null来区分需要再查证。bitmap索引对or条件的查询效果非常好,它不适应与索引列的值经常变化的情况,如果索引列的值经常变化,那么对bitmap索引将是灾难性的,因为它要锁定所有相关的叶子节点所在的块来更新bitmap的值,它适用于决策支持系统。
分享到:
相关推荐
现在,我们知道优化器如何对这些技术做出反应,清楚地说明 bitmap 索引和 B-tree 索引各自的最好应用。 在 GENDER 列适当地带一个 bitmap 索引,在 SAL 列上创建另外一个位图索引,然后执行一些查询。在这些列上,用...
在Oracle中,索引基本分为以下几种:B*Tree索引,反向索引,降序索引,位图索引,函数索引,interMedia全文索引等,其中最常用的是B*Tree索引和Bitmap索引。(1)、与索引相关视图查询DBA_INDEXES视图可得到表中所有...
oracle
开源项目-boljen-go-bitmap.zip,go-bitmap - Some simple bitmap utilities - Could someone please review SetAtomic?
开源项目-seiflotfy-s-bitmap.zip,S-Bitmap: Distinct Counting with a Self-Learning Bitmap (an equivalent to HyperLogLog) implemented in Go
jar包,官方版本,自测可用
2-9+bitmap在连续留存分析中的使用
oracle位图索引,讲解oracle的bitmap索引。
Oracle 11g 索引的详细解析!B-tree Index,反向索引,函数索引,bitmap 索引等等的详细介绍。
3-8+BitMap在大数据精准营销中的应用
9-slice Bitmap scaling by ByteArray. Very useful for GUI!!
jar包,官方版本,自测可用
bitmap-console-fonts-0.3-15.el6.noarch.rpm是centos工具包。
离线安装包,测试可用
jar包,官方版本,自测可用
jar包,官方版本,自测可用
jar包,官方版本,自测可用