2011-04-01 71 views
0

我們有如下所示的合併語句,而不是索引範圍掃描它正在進行全表掃描。它成功運行到最後一次,直到表被修改後,當它開始執行全表掃描時添加了3-4個新列。全表掃描代替索引範圍掃描導致性能問題

我們有7個類似的表,有相同的變化,即增加了3-4列,但是當我們重新構建索引時,它解決了問題,除了一個表。

任何人都可以對此有所瞭解嗎?

-Nagu

+3

該代碼似乎從您的問題中缺失,沒有它就無法回答。 – Lunc 2011-04-03 07:20:32

+1

也許優化器根據基數做出了很好的選擇。你是否嘗試重新統計表格內容?使用'dbms_stats.gather_schema_stats'或'gather_table_stats'。 – Benoit 2011-04-04 05:01:49

回答

1

嘗試在涉及的表上收集統計信息。最好的方法是在DBMS_STATS包中使用例程。最簡單的方法是簡單地調用DBMS_STATS.GATHER_DATABASE_STATS來指定沒有參數(即使用所有參數的默認值)。然而,這將需要一段時間。要收集單個表的統計信息,您可以使用DBMS_STATS.GATHER_TABLE_STATS。你需要給'ownname'和'tabname'參數賦值;因此,如果你有興趣的表被命名爲「MY_SCHEMA.MY_TABLE」的號召,DBMS_STATS.GATHER_TABLE_STATS會是什麼樣子

DBMS_STATS.GATHER_TABLE_STATS('MY_SCHEMA', 'MY_TABLE'); 

還有其他的參數,以這個程序,但默認值將正常工作。

如果數據庫仍然堅持對您感興趣的表的全表掃描,這可能意味着您的表上沒有索引,數據庫認爲這可能對滿足查詢很有用。如果您可以發佈您的查詢代碼,並告訴我們您在桌上有哪些索引,那麼您可能會提出其他建議。

分享和享受。