暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

解读执行计划七

原创 由迪 2020-07-09
1143

位图操作
该类操作基于位图数据(例如位图索引的索引记录)进行位操作,或者将其它数据结构转与位 图数据互换以利用位操作。

o BITMAP AND
对位图进行“与”(AND)操作
提示:位图索引中位图的每个位代表了其所对应的表记录中的索引字段的值是否为索引记录中值。 如果有两个位图索引需要进行数值匹配过滤,则只需要将表记录对应的位进行与操作就可以知道该 记录是否满足条件。
image.png
o BITMAP OR
对位图进行“或”(操作)操作。在查询的过滤条件中,如果位图索引字段直接的关系是“或”,可以通过 BITMAP OR 来判断位图所映射的一批数据记录是否满足条件。
image.png
image.png
o BITMAP CONVERSION FROM ROWIDS
将一批数据记录的 ROWID 映射为位图。

对于普通 B*树索引,Oracle 也可以将数据记录的 ROWID 映射成一个位图,然后进行位图操作。进行这样的转换需要系统参数_b_tree_bitmap_plans 设置为 TRUE。
image.png
o BITMAP CONVERSION TO ROWIDS
将位图映射为 ROWID。在一个位图键值中,包含了一批数据记录的起始地址和结束地址,且这批记录是连续的,因此位图中的每一个位就按序对应了一条数据记录。

image.png

o BITMAP CONVERSION COUNT
对位图进行记数操作。

image.png

o BITMAP MERGE
将多个位图合并成一个位图。
image.png
image.png

o BITMAP MINUS
对两个位图进行集合相减的操作。

一个位图映射了一批数据记录,在对多个位图索引中的一个或多个位图做排除过滤时,可以直接进行位图的相减操作。

image.png

在关系数据库中,可能会存在一些这样的数据:某个表存储大量的实际数据,而其中有多个字 段和不同的表存在管理关系。在查询时,这张表需要与多个表进行管理,以获取关联数据或由管理 表对数据进行过滤,这样的查询称之为星形查询,存储实际基础数据表又称为事实表,管理表则称 为维度表。例如,一个系统中的用户数据表往往是一个庞大的表,而用户有许多属性,如省份、所 属单位、毕业学校等,会与其他多个表,如省份表、单位表、学校表等,发生管理。在这样一个环 境中,事实表数据量相当庞大,而维度表的数据都比较少。按照星形查询的逻辑关系,即以事实表 为中心,与多个维度管理数据进行过滤,在星形转换(Star Transformantion)的优化方式出现之前, 需要以事实表为驱动表,再与多个维度进行管理查询,获取到数据之后,再对数据进行过滤,如果 过滤的数据较多,这样查询过程的额外代价相当大。而在 Oracle7i 之后,如果事实表的这些关联字段上建立了位图索引后(或者启用了 B*树位图转换特性后),优化器可以对这样的查询进行星形转换:即先由维度获取到过滤后的数据后,由得到关联字段中数值对事实表的位图索引字段进行迭
代,再将迭代到的位图进行合并,最后将位图转换为 ROWID 获取事实表的数据。这样,就可以最大限度的减少读取事实表数据再进行过滤的额外开销。

提示:星形转换只能在 CBO 模式下生效,且语句不能有绑定变量,优化器参数star_transformation_enabled 必须为 TRUE。
image.png
image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论