2017-06-21 55 views
2

我一直在研究連接到Oracle數據庫的Spring應用程序。在Oracle中執行查詢時的ORDER BY性能

三年後,我們表格中的記錄數量變得非常大,查詢的響應時間非常糟糕,我們的客戶也不滿意。因此,我搜索了got this URL for Oracle performance tuning

當響應時間很重要時,該URL的因子22告訴在查詢中不使用ORDER BY。所以,如果我從查詢中省略ORDER BY,那麼響應時間比ORDER BY多一半。

但是我不能在我的查詢中省略ORDER BY,因爲客戶需要排序。

如何解決我的問題,以便訂購和響應時間?

+0

你應該更新你的問題添加表的模式,,查詢的最佳sulotion之一..和執行計劃 – scaisEdge

+0

有些顧問通過無所事事的方式來改善生活,但Oracle性能調優:如果調優是*做這件事情*,或者*在任何情況下都不這樣做,他們就無法做到這一點。在這個網站上搜索'[oracle] + [performance]',你會發現我們給像你這樣的搜索者提供同樣的建議。性能是關於細節的:確切的查詢,實際的執行計劃,數據量和偏差,環境本身。沒有這些細節,你的問題是無法回答的。 – APC

+0

任何只說'不使用ORDER BY'的人都缺少這一點。性能調優是關於優化查詢以儘可能高效地滿足您的需求。不幸的是,表現問題的答案几乎總是「取決於」。取決於所有的@APC說的以及你的硬件配置文件和網絡。這就是績效專家收取大筆費用的原因 - 這很困難。 – BriteSponge

回答

0

因子這個網址告訴大家,不要被查詢 使用訂單時的響應時間是很重要的,我通過省略爲了從我的查詢 的22個這樣的響應時間比第一

一半以上

在互聯網上,你應該總是質疑你得到的每一條建議。

爲了使ORDER BY子句更快,您需要使用正確的索引。確保使用數據庫索引完成排序,因此避免全表掃描或顯式排序操作。如果有疑問,只需在Markus Winand's Use the Index Luke site上搜索SQL性能問題,或者更好的方法是閱讀他的SQL Performance Explained書。

正如我在本書High-Performance Java Persistence中所解釋的那樣,您應該確保緩衝池已正確配置,並且您有足夠的RAM來保存數據工作集和索引。

如果您確實擁有大量數據(例如數十億條記錄),那麼您應該使用分區。否則,對於數十億或數億個記錄,您可以使用更多RAM來垂直縮放。

此外,請確保您使用緊湊型數據類型。例如,不要將Enum序數值存儲爲32位整數值,因爲單個字節可能足以存儲您可能使用的所有Enum值。

1

是馬庫斯Winand求佛在其博客中表示,通過使用流水線爲了和它的細節在此link