前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试552】在Oracle中,位图连接索引是什么?

【DB笔试面试552】在Oracle中,位图连接索引是什么?

作者头像
AiDBA宝典
发布2019-09-29 15:27:58
9360
发布2019-09-29 15:27:58
举报
文章被收录于专栏:小麦苗的DB宝专栏

题目部分

在Oracle中,位图连接索引是什么?

答案部分

位图连接索引(Bitmap Join Indexes)是建立在两个或更多表的连接之上的位图索引。对于表列中的每个值,索引存储被索引表中的相应行的ROWID。相比之下,在标准位图索引中,索引是建立在一个表上的。在数据仓库环境中使用这种索引可以改进连接维度表和事实表的查询性能。创建位图连接索引时,标准方法是连接索引中常用的维度表(Dimension)和事实表(Fact)。当用户在一次查询中结合查询事实表和维度表时,就不需要执行连接,因为在位图连接索引中已经有可用的连接结果。通过压缩位图连接索引中的ROWID可以进一步改进性能,并且减少访问数据所需的I/O数量。位图连接索引,就是将事实表和维度表的ROWID提前进行映射,省去了连接时的开销。

位图连接索引有如下几点限制:

① 只可以索引维度表中的列。

② 用于连接的列必须是维度表中的主键或唯一约束;如果是复合主键,那么必须使用连接中的每一列。

③ 不可以对索引组织表创建位图连接索引,并且适用于常规位图索引的限制也适用于位图连接索引。

在创建位图连接索引时,相应的语法形式如下所示:

代码语言:javascript
复制
CREATE BITMAP INDEX FACT_DIM_COL_IDX  
ON FACT(DIM.DESCR_COL)
FROM FACT, DIM
WHERE FACT.JOINCOL = DIM.JOINCOL;

位图连接的语法比较特别,其中包含FROM子句和WHERE子句,并且引用两个单独的表。索引列通常是维度表中的描述列。

下面的SQL语句可以找出所有的位图连接索引:

代码语言:javascript
复制
SELECT * FROM DBA_INDEXES D WHERE D.JOIN_INDEX='YES';

通过视图DBA_JOIN_IND_COLUMNS可以查看位图连接索引的详细信息。

假定用户经常查询某种特定职位类型的雇员数。一个典型的查询可能如下所示:

代码语言:javascript
复制
SELECT COUNT(*)
  FROM HR.EMPLOYEES, HR.JOBS
 WHERE EMPLOYEES.JOB_ID = JOBS.JOB_ID
   AND JOBS.JOB_TITLE = 'Accountant';

上述查询通常使用JOBS.JOB_TITLE上的一个索引来检索职位表中的Accountant行,然后通过相同列JOB_ID,和员工表中EMPLOYEES.JOB_ID列上的索引来找到匹配的行。如果想要从索引本身检索数据,而不是从表中扫描获取数据,那么可以创建一个位图联接索引,如下所示:

代码语言:javascript
复制
CREATE BITMAP INDEX EMPLOYEES_BM_IDX
ON HR.EMPLOYEES(HR.JOBS.JOB_TITLE)
FROM HR.EMPLOYEES,HR.JOBS
WHERE HR.EMPLOYEES.JOB_ID=HR.JOBS.JOB_ID;

索引键是JOBS.JOB_TITLE,而被索引的表是EMPLOYEES。

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档