sql server 2008 -在列上创建索引以运行NULL值查询



我们正在使用SQL Server 2008。我们有一个有几百万行的表。我们有一个列为NULLABLE,但很少有行将该列设置为NULL。上百万行中可能有100-200行。

我们有一个查询来选择这些行,我们在该列上有一个索引。例如

SELECT
    tbl1.Col1,
    tbl1.Col2,
    tbl1.Col3,
    tbl1.Col4,
    tbl1.Col5,
    tbl1.Col6
    tbl2.Col1,
FROM
    tbl1
    INNER JOIN tbl2 ON (tbl1.FK = tbl2.PK)
WHERE
    tbl1.NullableColumn IS NULL

不幸的是,我们需要一些tbl1列(我不确定有多少列对于包含的列来说太多了,但我们绝对需要tbl1中的18列)。当我们运行这个查询时,优化器一直建议在表上建立索引。NullableColumn,但我们已经有一个了。它只是没有被使用,即使有一个索引提示,它仍然没有被使用。

执行计划说它在IX_tbl1_NullableColumn上执行索引查找,然后在聚集索引上执行键查找(键查找占用99%的时间)。

  1. 我遇到过一些人说你永远不应该使用NULLABLE列作为索引。这是真的吗?它适用于这种情况吗?
  2. 是否有一种更智能的方法来查找表中的少量NULL值?

在SQL Server上应用SP3修复了此问题。这很奇怪,我无法解释。我也没有在发布说明中看到任何关于它的信息。我不知道服务器只是需要重新启动,还是真的是SP3解决了这个问题。我认为可能是SP3,因为我们所有的其他服务器都在运行SP3,他们没有显示同样的问题。

最新更新