位图连接索引,就是将事实表和维度表的ROWID提前进行映射,省去了连接时的开销。  

下面将位图连接索引和一般的位图索引进行比较。  

看以下SQL语句:  

点击(此处)折叠或打开

  1. select s.prod_id,s.promo_id,s.channel_id
  2. from sales_A s, products_A pd, promotions_A pm, channels_A ch
    where s.prod_id = pd.prod_id
      and s.promo_id = pm.promo_id
      and s.channel_id = ch.channel_id
      and pd.prod_id = 27;

如果分别在sales_A表上为prod_id, promo_id, channel_id列创建位图索引,其执行计划为:  



然后创建位图连接索引。  
创建位图索引,需要确保维度表的连结列上有唯一索引或主键,如果是复合主键,则需要将相关列都加入进来。  
配置唯一性约束:  

点击(此处)折叠或打开

  1. alter table products_A add constraint products_pk primary key(prod_id);

创建位图连接索引:  

点击(此处)折叠或打开

  1. create bitmap index sales_A_bjix
  2. on sales_A
    ( pr.prod_id, pm.promo_id, ch.channel_id )
    from sales_A a, products_A pr, promotions_A pm, channels_A ch
    where a.prod_id = pr.prod_id
      and a.promo_id = pm.promo_id
      and a.channel_id = ch.channel_id
    tablespace sh
    nologging;

查看报告:  

点击(此处)折叠或打开

  1. column index_name format a15
  2. column inner_table format a15
    column inner_col format a15
    column outer_table format a15
    column outer_col format a15
    select index_name, inner_table_name inner_table, inner_table_column inner_col,
      outer_table_name outer_table, outer_table_column outer_col
    from user_join_ind_columns
    where index_name = 'SALES_A_BJIX';


INDEX_NAME      INNER_TABLE     INNER_COL       OUTER_TABLE     OUTER_COL
--------------- --------------- --------------- --------------- ---------------
SALES_A_BJIX    SALES_A         PROD_ID         PRODUCTS_A      PROD_ID
SALES_A_BJIX    SALES_A         PROMO_ID        PROMOTIONS_A    PROMO_ID
SALES_A_BJIX    SALES_A         CHANNEL_ID      CHANNELS_A      CHANNEL_ID

查看新的执行计划  



结论:位图连接索引性能更佳。  

注意:当where条件中包含位图连接索引的相关列的筛选条件时(上例中是prod_id=27),才会使用位图连接索引。如果没有这一句,将走全表扫描。  



©著作权归作者所有:来自51CTO博客作者小麦苗DB宝的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 【DB笔试面试561】在Oracle中,如何预估即将创建索引的大小?
  2. Oracle之函数索引
  3. Python中tuple和list有什么区别?Python入门!
  4. ELK基础架构解说-运维笔记
  5. Oracle索引的监控
  6. 洋洋洒洒一万二千字,彻底讲清楚MySQL的优化原理,看不完先收藏
  7. 「开源免费」基于Vue和Quasar的前端SPA项目crudapi后台管理系统
  8. 数据分析之Pandas合并操作总结
  9. 元数据管理—动态表单设计器在crudapi系统中完整实现

随机推荐

  1. 分享在C#中时间戳是怎么转换的?
  2. 如何使用C#来制作扫雷游戏的图文代码教程
  3. winform 信息管理系统图文实例
  4. C#开发中遇到的问题分享
  5. C#如何在图片增加文字的示例代码分享
  6. IdentityServer4 授权配置AllowedScopes
  7. 调用user32.dll显示其他窗口
  8. 关于C#winform如何实现右下角弹出窗口结果
  9. 什么是Less?koala配置及使用
  10. 使用Action的模型绑定实例教程