Oracle SQL执行计划操作(7)——排序相关操作

7.  排序相关操作

该类操作和SQL语句执行计划中的排序操作相关。根据不同的具体SQL语句及其他相关因素,如下各操作可能会出现于相关SQL语句的执行计划。

1)BUFFER SORT

在会话服务进程内存中对某个行源数据进行排序或其他相关操作,该操作最早出现于Oracle 9.0.1版本。该操作具体如图7-1中节点3所示。

图7-1 排序相关操作BUFFER SORT示例

2)SORT AGGREGATE

通过sum,count,max,min等函数获取数据的汇聚结果,期间,需要对相关行源数据进行排序实现。该操作具体如图7-2中节点1所示。

图7-2 排序相关操作SORT AGGREGATE示例

3)SORT CREATE INDEX

在索引创建期间进行的排序操作。该操作具体如图7-3中节点2所示。

图7-3 排序相关操作SORT CREATE INDEX示例

4)SORT GROUP BY

基于列值对数据行进行排序分组操作。该操作具体如图7-4中节点1所示。

图7-4 排序相关操作SORT GROUP BY示例

5)SORT GROUP BY ROLLUP

基于列值对数据行进行排序分组并进行合计操作。该操作具体如图7-5中节点1所示。

图7-5 排序相关操作SORT GROUP BY ROLLUP示例

6)SORT GROUP BY STOPKEY

基于列值对数据行进行排序分组操作,并通过rownum伪列对返回的数据行数进行限定,rownum相关条件不再满足时,即终止相关操作并输出结果。

--注:

      1)rownum: 一个伪列,其数据并非真实存在的数据,而是获取其他字段数据时,输出结果集中每行数据的序号。通常可用于限定SQL语句返回结果的行数,从而对相关SQL语句进行性能优化。

该操作具体如图7-6中节点3所示。

图7-6 排序相关操作SORT GROUP BY STOPKEY示例

7)SORT GROUP BY NOSORT

基于列值对数据行进行分组操作,因数据行输入顺序与需求顺序一致,该操作无需排序就可直接对数据行进行分组。例如:通过索引范围或完全扫描输出的数据行无需排序就可直接进行分组。该操作具体如图7-7中节点1所示。

图7-7 排序相关操作SORT GROUP BY NOSORT示例

8)SORT GROUP BY NOSORT ROLLUP

基于列值对数据行进行分组和合计操作,因数据输入顺序与需求顺序一致,无需排序就可直接对数据行进行分组和合计。该操作具体如图7-8中节点1所示。

图7-8 排序相关操作SORT GROUP BY NOSORT ROLLUP示例

9)SORT ORDER BY

基于相关列值对数据行进行排序,以实现数据的按序输出。该操作具体如图7-9中节点1所示。

图7-9 排序相关操作SORT ORDER BY示例

10)SORT ORDER BY STOPKEY

基于相关列值对数据行进行排序,以实现数据的按序输出,且通过rownum伪列限定返回的数据行数。该操作具体如图7-10中节点3所示。

图7-10 排序相关操作SORT ORDER BY STOPKEY示例

11)SORT UNIQUE

基于相关列值对数据行进行排序并去重,以输出无重复数据的结果集。该操作具体如图7-11中节点1所示。

图7-11 排序相关操作SORT UNIQUE示例

12)SORT UNIQUE NOSORT

基于相关列值对已有序数据行进行去重,以输出无重复数据的结果集。该操作具体如图7-12中节点1所示。

图7-12 排序相关操作SORT UNIQUE NOSORT示例

13)SORT UNIQUE STOPKEY

基于相关列值对数据行进行排序并去重,以输出无重复数据的结果集,且通过rownum伪列限定返回的数据行数。该操作具体如图7-13中节点3所示。

图7-13 排序相关操作SORT UNIQUE STOPKEY示例

14)SORT PARTITION JOIN

基于连接列值对数据行进行排序和分组(分区),以完成后续的连接操作,该操作出现于分组(分区)外连接中。

--注:

      1)这里的“分区”不是指表的分区,而是指执行计划中一种特定的操作。

该操作具体如图7-14中节点6所示。

图7-14 排序相关操作SORT PARTITION JOIN示例

猜你喜欢

转载自blog.csdn.net/LHDZ_BJ/article/details/127964279