[SQL SERVER]善用唯一索引

[SQL SERVER]善用唯一索引

建立唯一索引可以提供查詢優化程式更多資訊,基本可以提高選擇性且統計值更準確

如果資料表中某些欄位資料確定唯一,那麼建立唯一索引將可帶來不錯的查詢效能

下面簡單測試

 

欄位c2、c3資料型態和內容皆相同

 

a:c2欄位建立唯一索引

select top(100) c2 from Testunique
where c2>=10 and c2<=1000
order by c2,c3

 

image

 

image

 

 

b:c3欄位建立非叢集索引

select top(100) c3 from Testunique
where c3>=10 and c3<=1000
order by c3,c2

 

image

 

image

 

結論:

該TSQL透過唯一索引排序(order by c2,c3)基本上查詢優化程式不會使用排序運算子

因為唯一索引可以提供更準確的統計資料和選擇性,所以查詢優化程式就不必要使用排序運算子

而反觀使用一般索引排序(order by c3,c2),因為一般非叢集索引無法提供更準確資訊

但為了確保資料結果合乎預期,所以查詢優化程式必須使用排序運算子

兩者雖然執行計畫差異不大,但邏輯讀取(I/O)卻差了快10倍。

 

 

 

參考

Should I Use a UNIQUE Constraint or a Unique Index in SQL Server?

SQL Server Index Design Guide

Making an index UNIQUE