【发布时间】:2011-03-30 14:44:58
【问题描述】:
正如标题所述,我不明白为什么 sp_executeSQL 会生成与从 Sql Management Studio 运行查询完全不同的执行计划。
从 SQL management Studio 运行时,我的查询需要 3 秒,而通过 sp_executeSQL 在 management studio 中运行的查询需要 5 分钟。
我已经更新了统计数据并查看了索引,但我的脑海中仍然存在这样一个事实,即来自 sp_executeSQL 的执行计划比直接从我的管理工作室运行 sql 差得多。
所以这是我的问题:为什么以这两种不同的方式运行查询之间的执行计划会有如此大的差异?
谢谢
【问题讨论】:
-
请注意,我已经看到关于 sp_executeSQL 过程的执行计划的其他问题。我只是没有看到关于为什么该过程生成与 Management Studio 或自定义存储过程如此不同的计划的解释。
-
它将生成与自定义存储过程 (AFAIK) 完全相同的计划。对于存储过程和
sp_executesql,计划是根据它看到的第一组参数的值编译的。当您的查询具有常量且计划未自动参数化时,SQL Server 有时可以使用矛盾检测来不执行计划的一部分,并且还会对这些特定值使用基数估计。
标签: sql-server tsql sql-execution-plan sp-executesql