2011-04-28 96 views
2

我在Oracle 10g中有一張表,大約有51列和25萬條記錄。當我在表上執行一個簡單的選擇查詢來提取3列時,我在182k左右得到的成本太高。所以我需要降低成本效應。有沒有可能的方法來減少它?如何降低select語句的成本?

查詢:

select a,b,c 
from X 

一個 - 字符
b - VARCHAR2
Ç - VARCHAR2

TIA

回答

2

嗯......如果你知道你只需要這些的一個子集值,在那裏拋出一個WHERE子句顯然會幫助很多。如果你真的需要所有2500萬條記錄,並且表格被正確編制索引,那麼我會說你真的沒有太多的工作要做。

3

在這種情況下,很難在不知道爲什麼需要查詢2500萬條記錄的情況下提供良好的建議。正如@Ryan所說,通常你會有一個WHERE子句;或者,也許你正在將結果提取到另一個表或其他東西?

覆蓋索引(即over a,b,c)可能是對性能產生任何影響的唯一方法 - 查詢然後可以執行快速全索引掃描,並且每個塊可以獲取更多的記錄。

0

是的,更好地說出選擇的目的,因爲傑弗裏坎普說。

如果正常選擇,您只需要爲您的字段提供大多數情況下可以執行的索引,在索引(DBMS_STATS.GATHER_TABLE_STATS)上提供表統計信息,檢查每個字段的統計信息以確保您的索引正確(閱讀: http://bit.ly/qR12Ul)。

如果需要加載到另一個表,請使用遊標,限制每個執行的記錄並通過批量插入(FORALL技術)加載到表中。