2017-05-31 54 views
1
SELECT * FROM TABLE1 WHERE COL1 in(597966104, 597966100); 
SELECT * FROM TABLE1 WHERE COL1 in(0, 597966100) 

在上述2個查詢中,第一個查詢使用在COL1上創建的索引,但第二個查詢不使用索引。兩個查詢的唯一區別是第二個查詢的IN CLAUSE中使用了零(0)。爲什麼零會導致索引被忽略。這導致表掃描並降低查詢性能。有沒有解決這個問題的方法。對這個問題的任何幫助是值得歡迎和讚賞的。使用的數據庫是DB2在IN CLAUSE中使用零值的DB2查詢導致表掃描,忽略列上的索引

+0

您能否提供表格和索引定義? – Tatranskymedved

回答

1

DB2有一個基於成本的優化器。它試圖提供最佳的訪問計劃,並使用其統計和配置來確定它。 在你的情況下,col1 = 0的行數真的很重要。例如,對於40%的數據,當col1 = 0時,執行表掃描可能會更便宜。

如果您想弄清解釋查詢的更多詳細信息,您將看到數據是如何訪問的以及優化程序爲結果集猜測的行數。

通過運行表的runstats,確保您擁有正確且最新的統計信息,因爲這將成爲優化程序的最重要信息源。

+0

如果您已收集表格的分佈統計信息,則可能會發生這種情況。 –