SQL Server 查询:使用文字查询速度快,但使用变量查询速度慢

2023-12-14

我有一个使用 CTE 从表中返回 2 个整数的视图。如果我像这样查询视图,它会在不到一秒的时间内运行

SELECT * FROM view1 WHERE ID = 1

但是,如果我像这样查询视图,则需要 4 秒。

DECLARE @id INT = 1
SELECT * FROM View1 WHERE ID = @id

我已经检查了 2 个查询计划,第一个查询正在主表上执行聚集索引查找,返回 1 条记录,然后将视图查询的其余部分应用于该结果集,而第二个查询正在执行索引扫描,即返回大约 3000 条记录,而不仅仅是我感兴趣的记录,然后过滤结果集。

是否有任何明显的事情我错过了尝试让第二个查询使用索引查找而不是索引扫描。我正在使用 SQL 2008,但我所做的任何事情都需要在 SQL 2005 上运行。起初我以为这是某种参数嗅探问题,但即使我清除缓存,我也会得到相同的结果。


可能是因为在参数情况下,优化器无法知道该值不为空,因此它需要创建一个计划,即使该值不为空也能返回正确的结果。如果您有 SQL Server 2008 SP1,您可以尝试添加OPTION(RECOMPILE)到查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 查询:使用文字查询速度快,但使用变量查询速度慢 的相关文章

随机推荐