我们正在使用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%的时间)。
- 我遇到过一些人说你永远不应该使用NULLABLE列作为索引。这是真的吗?它适用于这种情况吗?
- 是否有一种更智能的方法来查找表中的少量NULL值?
在SQL Server上应用SP3修复了此问题。这很奇怪,我无法解释。我也没有在发布说明中看到任何关于它的信息。我不知道服务器只是需要重新启动,还是真的是SP3解决了这个问题。我认为可能是SP3,因为我们所有的其他服务器都在运行SP3,他们没有显示同样的问题。