2017-10-12 51 views
0

這個問題可能會很奇怪,因爲我對sql的瞭解有限。ORACLE-如何與成本相關的索引

我想優化一個包含數百萬條記錄的數據庫,但我似乎不知道什麼時候有性能。我一直在玩SQL Developer中的'解釋計劃',但這些數字對我來說並不意味着很多。

舉例來說,我有一個表列如下:

ID | Creation_date | End_date | Critical_date | Flag 

我跑這樣看這個表的查詢:

SELECT COUNT(ID) FROM TABLE 
WHERE FLAG = 1 
Creation_date < :p_d_one 
End_date > : p_d_two 
Critical_date < :p_d_three 

這給了我64的成本,使我決定添加索引。

現在我不明白的是,當我創建CREATION_DATE的指標,成本急劇下降 - >(64 - > 9)

CREATE INDEX TABLE_INDEX_CREATION_DATE ON TABLE (Creation_date desc) 

但是當我創建和索引的其他領域它不會改變(即使它們也是日期)。

任何想法,如果它仍然值得將它們納入我的索引? 如果他們對成本沒有任何影響,我還應該爲其他查詢創建索引嗎? 是否使用數據庫中的實時統計信息計算成本(基數,...)?

回答

0

您可以在查詢中提到的所有字段(按照該順序flag, creation_date, end_date, critical_date, id)創建索引,以便您的查詢變爲僅索引,即RDBMS根本不必讀取表,它可以獲取所需的所有內容來自索引。

對於特定的查詢,Oracle不會在給定的表上使用多個索引。擁有多個索引僅用於支持不同的查詢。

+0

Thx爲您的答案Erich,我可以在契據中包括我的索引中的所有字段。 對於成本沒有變化的查詢,你認爲值得爲它們創建一個新的索引(知道連接到表的許多索引也不好)? – Moufett

+0

也創建索引減慢其他進程,所以我不想避免他們,如果我可以。 – Moufett

+0

實際上,第一個索引是數據的最佳訪問路徑,因爲它更多的索引不能提高查詢性能。在DML語句中創建更多索引也會帶來更多成本。 –

相關問題