我们正在使用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%的时间)。
答案 0 :(得分:0)
将SP3应用于SQL Server修复了此问题。这很奇怪,我无法解释。我在发行说明中也看不到任何相关内容。我不知道服务器是否需要重新启动,或者它是否真的是SP3解决了这个问题。我认为它可能是SP3,因为我们所有其他服务器都运行SP3并且它们没有显示相同的问题。