排序操作執行計劃

 

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章