我正在處理一個oracle數據庫,試圖調整一些查詢,而且我很難理解爲什麼以特定方式處理特定的子句對查詢性能有如此嚴重的影響。下面是該查詢的高性能版本我做爲什麼這些看似相似的查詢具有如此不同的運行時間?
select * from
(
select a.*, rownum rn from
(
select *
from table_foo
) a where rownum <= 3
) where rn >= 2
同樣的查詢與此
) a where rownum >=2 rownum <= 3
)
進行更換可怕的最後兩行。幾個數量級更差
) a where rownum between 2 and 3
)
也表現可怕。我不明白第一個查詢中的魔法,以及如何將它應用於進一步的類似查詢。
您可以運行查詢分析('EXPLAIN PLAIN',http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/ex_plan.htm)以查看DBMS如何運行查詢。 – outis 2010-04-29 20:01:28
作爲一個方面說明,爲什麼'select *'當你可以簡單地'select * from(從table_foo a中選擇a。*,rownum rown其中rownum <= 3)其中rn> = 2'? – 2010-04-30 10:05:22