2009-11-20 53 views

回答

3

如果甲骨文真的有一個壞的執行計劃來了,你真的必須告訴它使用哪個索引(發生很少,但它發生),你可以通過用戶優化提示:

SELECT /*+ INDEX(mytable myindex) */ foobar from mytable 

但是,這應該是你的最後一招。之前,你甚至嘗試做這樣的說法,使用

execute dbms_stats.gather_table_stats('myschema','mytable') 

告訴甲骨文分析表;希望它能找出什麼時候使用索引。

+2

根據數據庫版本和某些參數設置,對'DBMS_STATS.GATHER_TABLE_STATS'的調用可能不會自動收集索引統計信息。在這種情況下,我們需要使用'DBMS_STATS.GATHER_INDEX_STATS'或顯式設置'CASCADE'參數:'execute dbms_stats.gather_table_stats('myschema','mytable',cascade => TRUE)' – APC 2009-11-20 12:37:49

4

您不必在選擇查詢中使用索引 - Oracle將決定哪些索引(如果有的話)最有助於執行查詢。通過爲所需數據提供快捷方式,索引可以幫助某些查詢(並非全部)提供性能。您應該閱讀Oracle Concepts Guide 中的索引 - 閱讀「索引概述」一節。

2

通常,您不需要對查詢進行任何說明就可以使用索引。 Oracle的計劃評估人員會選擇(希望)爲您執行該查詢的最佳方式。這是關係數據庫的Codd原則之一。

創建索引時可以提高性能嗎?

幾種情況。他們中的一些:

  1. 當您嘗試搜索標準(即:select * from foo where field = 121,它會幫助,如果你的表是大,你有索引)如果要排序的
  2. 結果。 (即:select * from foo order by field,它會幫助,如果你的表是大,你有索引)
  3. 當您執行聯接