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

解读执行计划十

原创 由迪 2020-07-29
2612

层次查询操作
以下操作为对具有层级关系的数据记录的查询操作。

o CONNECT BY (WITH FILTERING)
在查询层次关系数据时,对父子关系数据进行连接。并且在获取关联数据时,对数据进行过滤。这里的父子关系不是指关系表之间的联系,而是指数据行之间的层次关系,这个关系由一个或多个字段指明。(以下执行计划取自 11.2.0.1)
image.png

o CONNECT BY WITH (FILTERING(UNIQUE))
在查询树状关系数据时,对父子关系数据进行连接。并且在获取关联数据时,对数据进行过滤, 并获得不重复数据。
image.png

o CONNECT BY (WITHOUT FILTERING)
在查询层次关系数据时,对父子关系数据进行连接。在获取关联数据时,不对数据进行过滤。
image.png
image.png

o CONNECT BY WITHOUT FILTERING(UNIQUE)
在查询树状关系数据时,对父子关系数据进行连接。在获取关联数据时,不对数据进行过滤并获得不重复数据。
image.png

o CONNECT BY (NO FILTERING WITH START-WITH)
在查询树状关系数据时,对父子关系数据进行连接。并结合 START WITH 的条件关联数据。
image.png

o CONNECT BY (NO FILTERING WITH SW (UNIQUE))
在查询树状关系数据时,对父子关系数据进行连接。并结合 START WITH 的条件关联数据,并获得不重复数据。
image.png
image.png

o CONNECT BY PUMP
在查询层次关系数据时,通过数据泵访问已经读取的数据进行关联,建立数据的层次关系。这个层次关系的建立是通过表的自我关联(Self Join)实现的。当树状查询存在过滤条件(START WITH)时,需要先访问表获取到过滤后的数据集,然后再遍历该数据集、进行自我关联建立层次关系。在遍历数据集时,为了避免再次访问表,Oracle 创建了一个通道(即 connect by
pump)直接访问已经读取的数据。
提示:是否启用该特性,可以通过参数_old_connect_by_enabled 控制,false 为启用,true 禁用。
(以下执行计划取自 11.2.0.1)
image.png

视图操作
此类操作包括所有与视图、子查询相关的操作。

o VIEW
查询未与主查询合并的视图。
优化器在生产执行计划的过程中,查询转换器会尝试将子查询或视图的查询语句与主查询进行 合并重写。但在某些情况下,如通过提示禁止合并、需要获取子查询的伪列 ROWNUM 数据等,则不会合并子查询或视图。
image.png

o VIEW PUSHED PREDICATE
查询未与主查询合并的视图,并将主查询中匹配条件推入视图查询语句中。
image.png
3.4.8 数据集合操作
该类操作是针对集合进行的操作。

o CONCATENATION

将两个或多个结果集进行拼接。
拼接实际上就是对多个集合的简单相加。为了消除被重复获取的数据,会在获取后一集合的操 作上加上获取前一结合操作过滤条件。例如,在下例当中,第二个集合的操作上加上了过滤条件“LNNVL(“TABLE_NAME”=:C)”;第三个集合的操作上加上了过滤条件“LNNVL(“TABLE_NAME”=:C)
AND LNNVL(“OWNER”=:A)”。

提示:函数 LNNVL 确保 NULL 数据也被匹配。它的参数为一个表达式,当表达式结果为 FASLE 或者NULL 时返回 TRUE,否则返回 FALSE。
image.png
o UNION-ALL
将两个或多个数据集进行联合(或者说数据集相加)。
UNION 和 UNION ALL 的不同之处在于,UNION 会将消除联合后的数据集中的重复数据, UNION ALL 则不会;UNION 与 CONCATENATION 的不同之处在于,UNION 是在数据集相加之后,利用其它操作消除重复值,而 CONCATENATION 则是在获取数据集时增加过滤条件消除重复值。
image.png
o UNION-ALL (PARTITION)
对分区视图中的分区结果集进行联合。
提示:分区视图是在 Oracle 7i 中引入的技术,将大表拆分成小表,创建视图,以获取更好的性能。在 8i 中,Oracle 引入了分区表技术,在许多方面(如性能、管理)上超越了分区视图。
image.png

o UNION ALL PUSHED PREDICATE
将查询谓词推入联合查询的子查询或视图中。
提示:如果视图或子查询为“UNION ALL”,要实现该操作则需要确保优化器参数“_push_join_union_view”为 TRUE(默认);如果视图或子查询为“UNION”,要实现该操作则需要确保优化器参数“_push_join_union_view2”为 TRUE(默认)。
image.png
image.png

o INTERSECTION
取两个数据集的交集
注意,交集中的数据不存在重复数据。
image.png

o MINUS
两个数据集相减。
注意,相减后的数据不存在重复数据。A 数据集减去 B 数据集,相当于 A 数据集中去除了两个数据集的交集的数据以及重复数据。
image.png

o AND-EQUAL
对由两个或多个单字段索引获取 ROWID 数据集的取交集,并消除重复的 ROWID。
image.png
image.png

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

评论