bitmap join index笔记

bitmap join index

  • bitmap index
  • bitmap join index
  • oracle bitmap join index

整理一下看到的bitmap join index笔记。

bitmap index

针对每一个可能的值x,建立一个或一组位图映射,每个bit为1代表这个位置的值等于x,为0则不等于x。每个位置都可以直接映射到某一行的rowid。
bitmap index对于并发DML的性能很差,OLTP系统并不合适使用bitmap index。
从oracle9i起,oracle引进了一种新的索引类型:bitmap join index。和bitmap index建立在单个table上不同,bitmap join index是基于多表连接的,连接条件要求是等于的内连接(equi-inner join)。
在数据仓库环境中,定义索引的表通常称为事实表,与该表连接的表通常称为维度表。较普遍的是事实表的外键列和相关的维度表的主键列的连接操作。

bitmap join index

Bitmap join index能够消除查询中的连接操作,实际上它已经将连接的结果保存在索引当中了。相对于在表的连接列上建普通bitmap index来说,bitmap join index需要更少的存储空间。
同样的基于连接的Metarialized view也可以用来消除连接操作。但bitmap join index比起物化视图来更有效率,因为通过bitmap join index可以直接将基于索引列的查询对应到事实表的rowid。
Bitmap join index的一些限制条件:

  • 只支持CBO
  • 只能是equi-inner连接,任何外连接都无法使用bitmap join index
  • 多个连接条件只能是AND关系
  • 只能在事实表上执行并行DML。如果在维度表上执行并行DML,会导致索引变为unusable状态。
  • 不同的事务中,只能并发更新一个表。
  • 在From字句中,任何一个表都不能出现两次。
  • 在索引组织表(IOT)和临时表上不能建立bitmap join index。
  • 索引只能基于维度表中的列。
  • 维度表用于连接的列只能是主键列或者是有唯一约束的列。
  • 如果维度表的主键是组合主键,那么连接条件需要是全部主键列都参与。
  • 其他对于bitmap index的限制条件同样使用于bitmap join index,比如在分区表上只能是local,不能是global。

oracle bitmap join index

bitmap join index 是在单个表上定义的。对于由维度表列组成的索引键,它存储与该键对应的事实表rowid。但是,星型模式不是创建连接索引的要求。

在ON子句中,首先指定事实表,然后在括号内指定定义索引的维度表的列。在FROM子句中,指定连接的表。在WHERE子句中,指定连接条件。

[1] docs.oracle.com/Bitmap_Join_Indexes

你可能感兴趣的:(DataBase,数据库)