我发现如果我使用小于或大于运算符查询表,则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 server将使用iCount列的非集群索引来检索结果。
但是,如果我按此查询表格:
SELECT * FROM TestTable WHERE iCount< 10,
Sql server将对集群索引进行索引扫描,以便iID检索结果。
我想知道为什么当我在查询中使用小于或大于运算符时,sql server无法使用正确的索引。
答案 0 :(得分:4)
如果表的行数非常少,则SQL Server扫描聚簇索引而不是使用非聚簇索引,然后对聚簇索引中的其余列进行查找会更便宜。如果是这种情况,请将查询更改为SELECT iCount FROM ...并且您应该看到查询计划更改为使用您期望的索引。