Performance

如何提高此選擇查詢的性能?

  • April 8, 2014

我有兩個表:TABLE1 和 TABLE2。

我正在執行這個select查詢來獲取數據。執行需要很長時間:

SELECT TABLE1.* , TABLE2.COL1 , TABLE2.COL4 FROM TABLE1, TABLE2     
WHERE TABLE1.COL1 IN ('1','TEXT','HO TED')     
 AND TABLE1.COL2= 1800
 AND TABLE2.COL1 = 10519198     
 AND TABLE1.COL3>= 100
 AND TABLE1.COL4= TABLE2.COL2
 AND TABLE2.COL3=('TEXT')

如何提高此選擇查詢的性能?太多AND會影響我的表現嗎?

根據您的評論,這裡可能是更快的版本:

SELECT TABLE1.* , TABLE2.COL1 , TABLE2.COL4
FROM TABLE1
INNER JOIN TABLE2 ON TABLE1.COL4 = TABLE2.COL2
WHERE TABLE1.COL1 IN ('1','TEXT','HO TED')     
 AND TABLE1.COL2=1800
 AND TABLE1.COL3>=100
 AND TABLE2.COL1=10519198     
 AND TABLE2.COL3=('TEXT')

並且您需要在TABLE1(COL2, COL1, COL3). 注意:基於雜湊的索引不行,因為您的條件TABLE1.COL3>=100是間隔查詢,不可能被基於雜湊的索引固定!這也是原因,為什麼索引的最後一個元素必須是COL3 TABLE1(COL2, COL1, COL3)

另一個可以讓事情變得更好的索引是基於雜湊的索引TABLE2(COL1,COL3)

可能會有所幫助的進一步指數:TABLE1(COL4)TABLE2(COL2)(兩者)。

沒有一個索引應該是唯一的。

引用自:https://dba.stackexchange.com/questions/62745