2013-04-08 33 views
0

對於DB2數據庫,考慮表tblcolAcolBcolC)和查詢作爲multple指標同列SQL

select * 
from tbl 
where tbl.colA = 1234. 

select * 
from tbl 
where tbl.colA =1234 
and tbl.colB = 73874 

是否有助於如果我們在colA II創建兩個指標i))的複合材料 - colA,colB

如果上面的sql經常被訪問,那麼它將有助於如上所述的兩個索引。 optemizer會根據查詢選擇正確的索引嗎? 謝謝,

+2

複合索引應該用於使用索引的任何前綴的任何查詢。所以第二個索引將有助於這兩個查詢。 – Barmar 2013-04-08 20:50:55

回答

2

你只需要索引(ii)。只要搜索數據位於列的前綴中,就會使用組合索引。因此,當您搜索colAcolA and colBcolA, colB, and colCcolA, colB, colC, and colD時,將使用colA,colB,colC,colD上的索引。

+0

另外,創建索引時,請務必按正確的順序排列。如果索引是ColB,ColA,那麼il將被用作索引sargable,並且不如ColA ColB那樣有效。 – AngocA 2013-04-08 21:07:29

+0

通過Barmar和AngocA擴展上述內容,對於複合索引(COLA,COLB),如果查詢select * from tbl where colB = 3456.它將使用此查詢的索引。 – 2013-04-08 21:08:18

+0

不,如果WHERE子句不使用索引的前綴,則索引根本無法使用。把一個複合索引想象成一個樹結構 - 在你首先選擇A父母之前,你不能找到B的結構。 – Barmar 2013-04-08 21:36:04