執行計劃的理解.

li__hl8888發表於2016-05-24

SORT(UNIQUE)

指把查詢語句的輸出結果變成唯一集合的過程。

1>一種是使用了“DISTINCT”,

2>一種是子查詢以提供者角色向主查詢提供其執行結果。


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);

前提是先進行子操作,否則就進行過濾操作.

SORT(UNIQUE)操作。如果該子查詢被放在主查詢之後執行,則該排序執行計劃就不會被顯示出來,此時顯示的是FILTER。


SORT(AGGREGATE)

SORT(AGGREGATE)是指在沒有GROUP BY的前提下,使用統計函式對全部資料物件進行運算時所顯示出來的執行計劃。

         那麼MIN和MAX如果比該值小則將其替換。(因為索引是排序的,因此索引列值的最小值必然在索引的第一個塊上)。而MAX則是僅僅讀取最後一個索引塊。想要獲得這樣的執行計劃,不能使用WHERE和GROUP BY,當然還要求所要進行統計的列必須是索引的先行列(如果是組合索引,則該列必須位於最前面),並且在SELECT-List中不能新增其他任何額外的操作要求。


SORT(GROUP BY)

GROUP BY而進行的相關操作,為了進行分組就只能進行排序,因此所需分組的資料量越大則代價就越高。

         如果想透過GROUP BY 將海量表分為上千個組,在這種對超大型表執行GROUP BY時,就可以明顯地感覺到該操作所需要的代價。當所要排序的資料超過一定量時,其代價就會變得非常大,解決該問題的一個方法就是使用HASH(GROUP BY)。


SORT(JOIN)

SORT(ORDER BY)


count

 select id,rownum from employee;(在id列上有一個主鍵索引)為了完成這個查詢,最佳化器執行一個全索引掃描(主鍵索引),後跟一個count操作生成每個行的rownum值,

count操作不需要等待得到整個記錄集,隨著從employee表中返回記錄,rownum計數器進行增量,從而確定每個記錄的rownum.


count stopykey

例2:在rownum偽列上使用一個限定

 select id,rownum from employee where rownum<10;

     為了實施限定條件,最佳化器用count stopkey操作代替count操作,它將rownum偽列的增量值與限定條件中指定的值進行比較,如果rownum偽列的值大於限定條件中指定的值,則查詢不再返回更多的行!


SORT ORDER BY STOPKEY

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8568259/viewspace-2105950/,如需轉載,請註明出處,否則將追究法律責任。

相關文章