有人可以向我解釋爲什麼當我將日期順序asc或desc排序到任何查詢語句時。它會顯着降低性能嗎?Oracle:按日期排序的性能較差,rownum = 5000
通常的說法會是這樣
select * from table where ... order by modified_data asc
什麼是緩解這一問題的最佳方法是什麼?當我按日期取消訂單時,表現會提高很多。
有人可以向我解釋爲什麼當我將日期順序asc或desc排序到任何查詢語句時。它會顯着降低性能嗎?Oracle:按日期排序的性能較差,rownum = 5000
通常的說法會是這樣
select * from table where ... order by modified_data asc
什麼是緩解這一問題的最佳方法是什麼?當我按日期取消訂單時,表現會提高很多。
它取決於查詢計劃,modified_date
是否已編入索引以及您擁有哪些其他謂詞。但是,一般來說,添加ORDER BY
需要Oracle在返回結果之前對結果進行排序。反過來,這通常要求Oracle在返回任何行之前完全實現結果集。如果您正在測量返回第一行所需的時間,而不是返回最後一行所需的時間,則會放大效果。
這不是一個真正的問題,一般來說你會減輕。如果你需要一個排序的結果集,你會產生排序該結果集的開銷。否則,你不會。在特定情況下,可能會添加一些索引,這些索引將允許Oracle按排序順序獲取結果,而不是對結果進行物理排序。但是,這取決於許多您沒有提到的特定於查詢的因素。
排序需要時間,尤其是整個結果集必須先構建,然後才能開始排序。如果字段modified_data
將被索引,則情況並非如此。
嘗試在你餐桌的ID上創建一個索引。如果您不需要所有列,請更改select列中的select *。