在列上创建索引以运行NULL值的查询

时间:2014-03-11 10:54:35

标签: sql-server-2008 indexing database-performance

我们正在使用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列(我不确定有多少列可以用作包含的列,但我们有18个来自tbl1的列,我们绝对需要)。当我们运行此查询时,优化器会继续在tbl.NullableColumn上建议一个索引但我们已经有一个索引。它只是没有被使用,即使有一个索引提示它仍然没有被使用。

执行计划表示它正在对IX_tbl1_NullableColumn执行索引查找,然后对聚簇索引执行keylookup(keylookup占用99%的时间)。

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

1 个答案:

答案 0 :(得分:0)

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