2011-12-06 174 views
1

我發現如果我用小於或大於運算符查詢表,sql服務器索引無法正常工作。小於或大於sql server中索引的運算符問題

說我有一個簡單的表(TestTable的)僅具有2列是這樣的:

Column Name, column type, primary Key, index 
iID,   int,   yes,   cluster index 
iCount,  int,   no,   non-cluster index 
name,  nvarchar(255), no,  no index 

現在,我通過這個查詢表:

SELECT * FROM TestTable的WHERE ICOUNT = 10 。

非常好,Sql服務器將使用列iCount的非集羣索引來檢索結果。

但是,如果我通過這個查詢表:

SELECT * FROM TestTable的WHERE ICOUNT < 10,

SQL Server將做轉移到集羣指數爲IID一個索引掃描檢索結果。

我想知道爲什麼sql server不能使用正確的索引,當我在查詢中使用少於或大於運算符。

+0

考慮將聚簇索引按照該順序**更改爲化合物'(iCount,iID)** **。 – onedaywhen

+0

或者,他可以將'name'添加爲iCount的非聚集索引中的包含列,這不需要改變主鍵的性質。 – hatchet

回答

4

如果表中的行數很少,則SQL Server掃描聚集索引而非使用非聚簇索引,然後查找聚簇索引中其餘列的費用便宜。如果是這種情況,請將查詢更改爲SELECT iCount FROM ...,並且您應該看到查詢計劃更改爲按照您的預期使用索引。

相關問題