排序操作执行计划
来源:互联网 发布:国际空间站知乎 编辑:程序博客网 时间:2024/05/17 02:58
SORT(UNIQUE)
该操作是指把查询语句的输出结果变成唯一集合的过程。出现该排序的情况有两种,一种是使用了“DISTINCT”,另外一种是子查询以提供者角色向主查询提供其执行结果。
SELECT order_id,order_date
FROM orders
WHERE order_id in (SELECT order_id
FROM order_item
WHERE item_id = :b1
AND order_qty>100);
由于主查询的结果必须存在于子查询中,在这里必须要将作为“M”集合的子查询转换为不允许重复元素存在的“1”集合,所以执行了SORT(UNIQUE)操作。如果该子查询被放在主查询之后执行,则该排序执行计划就不会被显示出来,此时显示的是FILTER。
SORT(AGGREGATE)
SORT(AGGREGATE)是指在没有GROUP BY的前提下,使用统计函数对全部数据对象进行运算时所显示出来的执行计划。在使用SUM、COUNT、MIN、MAX、AVG等统计函数时并不执行我们所熟悉的一般排序。而是在读取表中数据的同时以每一行数据为对象进行求和,AVG或者COUNT也同样是以所读取的每一行数据为对象进行反复计算的。
那么MIN和MAX是如何进行计算的呢?其方法与上面所介绍的基本相同。MIN的执行方法为在最开始将所读取的第一个值记录下来,然后将该值与下一个读取的值进行比较,如果比该值小则将其替换。在执行该统计操作时如果可以使用索引,则能够获得非常好的效果。在该执行计划中虽然显示的是索引全扫描,但实际上,仅仅会读取第一个索引块,之后并不继续进行扫描(因为索引是排序的,因此索引列值的最小值必然在索引的第一个块上)。而MAX则是仅仅读取最后一个索引块。想要获得这样的执行计划,不能使用WHERE和GROUP BY,当然还要求所要进行统计的列必须是索引的先行列(如果是组合索引,则该列必须位于最前面),并且在SELECT-List中不能添加其他任何额外的操作要求。
SORT(GROUP BY)
该操作是将数据行向不同分组中聚集的操作,即依据查询语句中所使用的GROUP BY而进行的相关操作,为了进行分组就只能进行排序,因此所需分组的数据量越大则代价就越高。
如果想通过GROUP BY 将海量表分为上千个组,在这种对超大型表执行GROUP BY时,就可以明显地感觉到该操作所需要的代价。当所要排序的数据超过一定量时,其代价就会变得非常大,解决该问题的一个方法就是使用HASH(GROUP BY)。
SORT(JOIN)
SORT(ORDER BY)
- 排序操作执行计划
- 排序操作的执行计划
- 集合操作执行计划[摘]
- in操作执行计划观察
- 理解执行计划中的一些sort操作
- 理解执行计划中的一些sort操作
- oracle执行计划 操作符详述
- oracle并行查询操作的执行计划
- 执行计划
- 计划、执行
- 执行计划
- 执行计划
- 计划,,,执行
- 执行计划
- 执行计划
- 执行计划
- 执行计划
- 执行计划
- android-textView自动连接 linkify
- objective-c编程语言 第一章 对象,类和消息 第二小节 消息(object messaging)
- POJ1269(WA)实在不知道问题在哪里了。。。麻烦帮看。。
- android-textView-字体的设置
- 键盘钩子修改键值
- 排序操作执行计划
- objective-c编程语言 第一章 对象,类和消息 第三小节 类(Classes)
- 某大侠的“最近两周android总结”(我觉得大家可以看看并学习)
- ZOJ 1610 Count the Colors
- android-AnalogClock_DigitalClock 时钟
- 日期时间间隔操作
- zhcon-Ubuntu字符界面中文乱码和分辨率的解决方案
- c#版公历转农历
- 多线程(认识多线程、线程的常用操作方法)