我正在运行两个非常相似的更新查询,但由于我未知的原因,他们正在使用完全不同的执行计划。通常这不会是一个问题,但他们都更新完全相同数量的行,但一个正在使用的执行计划,远远低于其他,4秒比2分钟,当扩大这导致我一个大问题。针对类似查询的不同执行计划
两个查询之间唯一的区别是一个是使用列CLI和另一个DLI。这些列是完全相同的数据类型,并且两者的索引完全相同,但对于DLI查询执行计划,不使用索引。
任何有关为什么发生这种情况的帮助非常感谢。
-- Query 1
UPDATE a
SET DestKey = (
SELECT TOP 1 b.PrefixKey
FROM refPrefixDetail AS b
WHERE a.DLI LIKE b.Prefix + '%'
ORDER BY len(b.Prefix) DESC)
FROM CallData AS a
-- Query 2
UPDATE a
SET DestKey = (
SELECT TOP 1 b.PrefixKey
FROM refPrefixDetail b
WHERE a.CLI LIKE b.Prefix + '%'
ORDER BY len(b.Prefix) DESC)
FROM CallData AS a
感谢您的及时响应 我已经检查了这两个指标的统计数据,我不确定我在这里寻找什么,有什么建议吗?有一些不同之处。有什么我可以做的例如,有没有什么办法可以强制优化器使用索引,因为它似乎正在采用的路线的效率要低得多。如果索引不能改进我的查询,似乎毫无意义的索引 – 2010-06-08 15:18:14
了解索引如何工作在这里是有用的。我正在编辑我的答案添加此.... – 2010-06-08 15:57:17
感谢您的解释,这当然帮助我理解为什么会发生这种情况。不幸的是,我无法进一步限制结果,所以我想我必须忍受这一点,因为从你所说的事实上来看,它实际上是最有效的方式。 – 2010-06-09 13:42:32