2016-09-06 46 views
-1

我使用Oracle數據庫,並有我們在哪裏查詢所有行的情況下(選擇不多,但並不是所有列名),從表(在某些情況下,鑑於對錶創建(S)) 。我想提高我的選擇查詢的性能。我在表中使用主鍵。Oracle數據庫讀取查詢的性能提升

例如有一個表:表(ID,A,B,C,d,E,F)具有100K行。我詢問它如下:

SELECT c, d, f FROM Table; 

我試過使用物化視圖,但實際上,發現幾乎沒有性能提升。

我想過使用分區,可是轉念一想,我掃描所有的行(但不是所有列),所以將在此情況下,分區幫助?

+2

也許你應該考慮表壓縮:http://docs.oracle.com/cd/B28359_01/server.111/b28310/tables002。htm#CJAGFBFG – vercelli

+0

如果您只選擇大量的行,那麼瓶頸幾乎肯定是數據庫與應用程序之間的網絡讀取。但是,爲什麼你會頻繁地選擇表中的所有行?爲什麼用戶或應用程序經常需要查看100,000行? –

+0

顯示100k行是針對您的SQL客戶端而不是數據庫的性能測試。你爲什麼認爲MVIEW可以更快地檢索所有**行?你仍然可以檢索100k行。 –

回答

1

這是有點長的評論。

如果您正在選擇所有行,您正在選擇大量數據。刪除少量列可能對性能影響不大 - 除非您要刪除的列非常寬。畢竟數據庫引擎仍然需要讀取全部的的數據頁面,並且返回幾乎所有的數據。

如果您確實有寬列,那麼您可以通過使用物化視圖(以及相關的開銷)來減少時間,或將常用列存儲在一個表中,並將其餘列存儲在另一個表中(垂直分區)。

最後,100,000條記錄是大量記錄返回到應用程序。如果你可以在數據庫中做更多的工作並減少返回的數據量,我不會感到驚訝。

1

根據您的列類型/數據,100,000條記錄不太多,無法檢索。如果您正在檢索大型文件,比如BLOBCLOB,那就太多了。那麼,這一切都依賴於運行你的Oracle服務器的機器的配置,但我假設它有一個合理的配置。

我在Oracle表執行查詢,就像你用386843點的行...它8.25秒返回了3分NUMBER列各行......考慮到數據量,它不是那麼慢......

EXPLAIN PLAN說,它做了一個指數FAST FULL SCAN,但所有數據被檢索到,一個FULL TABLE SCAN不應該也代表了性能問題。

我認爲你應該檢查兩點:

  1. 多少客戶會同時在功能上執行呢?比方說,500次併發訪問......這是一個很大的負荷,你的數據庫/網絡,甚至一些數據緩存...

  2. 不是網絡延遲你的工作?你可能在這裏發現一個問題...

你不能只是加載數據「按需」?每次檢索5,000行。這是處理您的用例的更好方法。這樣,表/索引分區可能會有很大的幫助。