【问题标题】:Less than or greater than operator issue for index in sql serversql server中索引的小于或大于运算符问题
【发布时间】:2012-01-14 11:06:20
【问题描述】:

我发现如果我用小于或大于运算符查询表,sql server 索引不能正常工作。

假设我有一个只有 2 列的简单表 (TestTable),如下所示:

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

Sql server 将对 iID 的集群索引进行索引扫描以检索结果。

我想知道为什么当我在查询中使用小于或大于运算符时,sql server 无法使用正确的索引。

【问题讨论】:

  • 考虑将聚集索引更改为复合(iCount, iID)按此顺序

标签: sql sql-server-2008


【解决方案1】:

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

【讨论】:

  • 这是否意味着使用iCount < 1iCount = 0 OR iCount = 1 具有相同的影响
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多