深入理解Oracle索引(13):位图连接索引基础介绍

    Bitmap Index 建立在单个 table 上不同、Bitmap Join Index 是基于多表连接的
   较普遍的用法是事实表的外键列和相关的维度表的主键列的连接操作
   
   或许有朋友对啥是事实表和维度表有点迷糊哈、这里简单谈谈 Rocky 的观点:
   首先、我认为、这俩是数据仓库的东东
   其次呢、
   ● 事实表:你要关注的内容、比如高考状元

   ● 维度表:你通过什么来关注、比如按地区、那么是福建的?北京的?哈哈、感觉维度表是个窗口、不同窗口看到的内容不同


   深入理解Oracle索引(13):位图连接索引基础介绍_第1张图片



   ㈠ 优点:
   
   ⑴ 优化查询
   
      理由:
      ● 能够消除查询中的连接操作、因为它实际上已经将连接的结果集保存在索引当中了
      ● 位运算加速查询
      
   ⑵ 节省空间
   
      理由:
      压缩了事实表的 ROWIDS


   

   ㈡ 缺点:
   
   ⑴ 更多的索引数量开销
      
      理由:
      Up to one index per dimension-table column rather than one index per dimension table is required
   
   ⑵ 更高的索引维护成本
      
      理由:
      Building or refreshing a bitmap join index requires a join


   

   ㈢ 限制:
   
   因为位图连接索引事前缓存了查询的结果集、所以造成如下几点限制:
   
   ① 只能在事实表上执行并行DML、如果在维度表并行DML、将导致索引状态成 unusable
   ② 不同的事务中、只能并发更新一个表
   ③ 在 From 字句中、任何一个表都不能出现两次
   ④ 在索引组织表(IOT)和临时表上不能建立bitmap join index
   ⑤ 索引只能基于维度表中的列
   ⑥ 维度表用于连接的列只能是主键列或者是有唯一约束的列
        如果维度表的主键是组合主键、那么连接条件必须是全部主键列都参与
   ⑦ 位图连接索引不能在线重建或者建立
   ⑧ 只支持 CBO
   ⑨ 多个连接条件只能是AND关系


   广告时间、请勿走开、继续浏览鄙人索引相关文章哦、

你可能感兴趣的:(JOIN,bitmap,index)