2012-08-27 48 views
1

有人可以向我解釋爲什麼當我將日期順序asc或desc排序到任何查詢語句時。它會顯着降低性能嗎?Oracle:按日期排序的性能較差,rownum = 5000

通常的說法會是這樣

select * from table where ... order by modified_data asc 

什麼是緩解這一問題的最佳方法是什麼?當我按日期取消訂單時,表現會提高很多。

回答

4

它取決於查詢計劃,modified_date是否已編入索引以及您擁有哪些其他謂詞。但是,一般來說,添加ORDER BY需要Oracle在返回結果之前對結果進行排序。反過來,這通常要求Oracle在返回任何行之前完全實現結果集。如果您正在測量返回第一行所需的時間,而不是返回最後一行所需的時間,則會放大效果。

這不是一個真正的問題,一般來說你會減輕。如果你需要一個排序的結果集,你會產生排序該結果集的開銷。否則,你不會。在特定情況下,可能會添加一些索引,這些索引將允許Oracle按排序順序獲取結果,而不是對結果進行物理排序。但是,這取決於許多您沒有提到的特定於查詢的因素。

1

排序需要時間,尤其是整個結果集必須先構建,然後才能開始排序。如果字段modified_data將被索引,則情況並非如此。

0

嘗試在你餐桌的ID上創建一個索引。如果您不需要所有列,請更改select列中的select *。