Oracle B树索引和位图索引简介

  • B 树索引

        B 树索引在 Oracle 中是一个通用索引。在创建索引时它就是默认的索引类型。B 树索引可以是一个列的(简单)索引,也可以是多个列的(组合/复合)索引。B 树索引最多可以包括32 列。

        在下图的例子中,B 树索引位于雇员表的 last_name 列上。这个索引的二元高度为 3 (二元高度的概念后续会介绍);接下来,Oracle 会穿过两个树枝块(branch block),到达包含有 ROWID 的树叶块。在每个树枝块中,树枝行包含链中下一个块的 ID 号。块包含了索引值、ROWID,以及指向前一个和后一个树叶块的指针。Oracle 可以从两个方向遍历这个二叉树。B 树索引保存了在索引列上有值的每个数据行的 ROWID 值。Oracle 不会对索引列上包含 NULL 值的行进行索引。如果索引是多个列的组合索引,而其中列上包含 NULL 值,这一行就会处于包含 NULL 值的索引列中,且将被处理为空(视为NULL)。

B树索引特点:

适合与大量的增、删、改(OLTP系统)

不能用包含 OR 操作符的查询;

适合高基数的列(唯一值多)

典型的树状结构;

每个结点都是数据块;

大多都是物理上一层、两层或三层不定,逻辑上三层;

叶子块数据是排序的,从左向右递增;

在分支块和根块中放的是索引的范围;

 

  • 位图索引

        位图索引更像是用二进制标识数据实现的查找,举个例子:

        有一张表一千万数据,只有姓名、性别、婚姻状况三个字段,现在要查询未婚男性的人

        Select * from table where sex = ‘男’ and marriage = ‘未婚’;

        如果使用B树索引,进行筛选,性别就要拉出五百万数据,完全没必要。我们可以使用位图索引给对应字段设置向量,可以理解为将性别字段拆成男、女两个字段,若该行数据为男,则“男”字段标为 1 “女”字段标为0;后续的婚姻字段也是同理,将婚姻拆成了三个字段,已婚、未婚和离婚。

        当我们查询时,首先取出所有数据的男向量10100...,然后取出未婚向量00100...,将两个向量做and操作,这时生成新向量00100...,可以发现第三位为1(当然后续一千万中还会有),表示该行数据就是我们需要查询的未婚男性的结果。 

        位图索引非常适合于决策支持系统(Decision Support System,DSS)和数据仓库,它们不应该用于通过事务处理应用程序访问的表。它们可以使用较少到中等基数(不同值的数量)的列访问非常大的表。尽管位图索引最多可达 30 个列,但通常它们都只用于少量的列。

        例如,您的表可能包含一个称为 Sex 的列,它有两个可能值:男和女。这个基数只为 2,如果用户频繁地根据 Sex 列的值查询该表,这就是位图索引的基列。当一个表内包含了多个位图索引时,您可以体会到位图索引的真正威力。如果有多个可用的位图索引,Oracle 就可以合并从每个位图索引得到的结果集,快速删除不必要的数据。

 

位图索引特点:

适合与决策支持系统;

做 UPDATE 代价非常高;

非常适合 OR 操作符的查询;

基数比较少的时候才能建位图索引;

位图对于低基数(少量的不同值)列来说非常快

 

位图索引的使用限制:

基于规则的优化器不会考虑位图索引。

当执行 ALTER TABLE 语句并修改包含有位图索引的列时,会使位图索引失效。

位图索引不包含任何列数据,并且不能用于任何类型的完整性检查。

位图索引不能被声明为唯一索引。

位图索引的最大长度为 30,不能在繁重的 OLTP 环境中使用位图索引,否则系统性能堪忧

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aikes902

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值