0

我對Oracle 11g的查詢性能有疑問。查詢性能 - 按主鍵或其他鍵排序

我有兩個查詢按主鍵和非主鍵排序。

materialid是主鍵。 材料是非主鍵。

Query A: select * from rawmaterial_t order by materialid; 
Query B: select * from rawmaterial_t order by material; 

以上哪些查詢性能會更好或是否相同? 我們應該如何提高性能?

謝謝!

+1

你實際上是從表中選擇每一行嗎?或者,在現實中是否有一個'WHERE'子句將結果限制爲更少的行數?這將影響Oracle是否會考慮任何索引,或者是否會執行全表掃描,然後對結果進行排序。 'rawmaterial_t'是堆組織表嗎?還是它是一個索引組織的表? – 2014-11-03 22:47:03

回答

0

檢查性能的最佳方法是嘗試在自己的系統上運行這兩個查詢。

一般來說,Oracle足夠聰明地使用索引(如果適合的話),特別是在沒有聯接,聚合或過濾器的情況下,尤其適用於order by。如果兩列都有索引,那麼主索引可能會稍快一點。

所以,我希望order by materialidorder by material更快。如果您有material的索引,則性能應該可比。

+1

但是,如果沒有'WHERE'子句,我認爲執行表掃描然後在內存中排序數據而不是使用索引並對錶中的每一行執行ROWID查找會更有效。正如所寫的,我不希望Oracle使用任何索引。 – 2014-11-03 22:48:24

+0

@JustinCave。 。 。在這種情況下,Oracle可能會或可能不會使用索引。該文檔確實會說「如果可以使用索引來滿足'ORDER BY'子句,那麼優化器將使用此選項並避免排序。」 (http://docs.oracle.com/cd/B28359_01/server.111/b28274/optimops.htm#i52300) – 2014-11-03 22:57:04

+0

當然,它可以。除非有人在桌面和索引上大量播放統計數據,以使索引看起來足夠吸引人,否則我會非常驚訝。不過,我懷疑真正的問題涉及到一些謂詞,這些謂詞可以減少返回的行數並使索引更加合理。 – 2014-11-03 23:00:26