2016-07-29 103 views
1

從性能的角度來看,以下SQL是好還是壞的做法?SQL索引性能,哪個更好?

兩個查詢,通過一個共同的列搜索:

CREATE INDEX tbl_idx ON tbl (a, b); 

SELECT id, a, b 
FROM tbl 
WHERE a = @a 
    AND b = @b; 


SELECT id, a, b 
FROM tbl 
WHERE b = @b; 
+0

請標記相關RDBMS – TheGameiswar

+0

首先查詢更適合你的索引。對於第二個查詢,您將使用單列索引。 –

+1

如果索引在(a,b)上,那麼只有b上的查詢不會使用它。 – njzk2

回答

2

該指數

CREATE INDEX tbl_idx ON tbl (a, b); 

將這些查詢

where a= and b = 
where a= and b> 
where a like 'someval%' and b= 

而不是有用有用這些查詢:

where b= 
    where a> and b= 
    where a like '%someval%' and b= 
    where isnull(a,'')= and b= 

總之,在多列索引中,如果SQL Server能夠在第一個關鍵列上執行查找,那麼索引將會很有用。

回到你的問題,第一個查詢將從您創建的索引中受益,而第二個查詢可能傾向於在此索引上執行掃描..

有很多因素決定seek是好還是壞。在某些情況下,SQL Server可能傾向於不使用可用的索引,如書籤查找成本超出限制。 。

參考文獻:

2

如果顛倒索引列順序(B,A),則索引可以是兩個查詢是有用的。此外,如果id是作爲聚集索引實現的主鍵,則該索引將覆蓋這兩個查詢,因爲聚集鍵隱式地包含爲行定位符。否則,ID可以顯式地添加爲包括列,提供最佳的性能:

CREATE INDEX tbl_idx ON tbl (a, b) 
INCLUDE(id);