小于或大于sql server中索引的运算符问题

时间:2011-12-06 21:03:47

标签: sql sql-server-2008

我发现如果我使用小于或大于运算符查询表,则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无法使用正确的索引。

1 个答案:

答案 0 :(得分:4)

如果表的行数非常少,则SQL Server扫描聚簇索引而不是使用非聚簇索引,然后对聚簇索引中的其余列进行查找会更便宜。如果是这种情况,请将查询更改为SELECT iCount FROM ...并且您应该看到查询计划更改为使用您期望的索引。