如何在SSMS中测试带参数SQL查询性能并复用原有执行计划?
在SSMS中测试带参数慢SQL的性能(保留原有执行计划)
首先修正你提供的SQL语法错误:SELECT 1, 2, 3, 末尾多了一个逗号,需移除才能正常执行。
以下是几种满足需求的操作方法:
方法1:参数化执行+强制复用原有执行计划
- 打开SSMS的包括实际执行计划(快捷键
Ctrl+M)和包括客户端统计信息(快捷键Ctrl+Shift+S),方便后续查看性能指标(执行时间、CPU/IO消耗、运算符成本等)。 - 先获取原有执行计划的XML内容:通过系统视图查询缓存中的计划,匹配原查询文本即可提取
SELECT qp.query_plan FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp WHERE st.text LIKE '%SELECT 1, 2, 3 FROM MyTable WHERE Column1 = @parameter1%' - 定义参数并执行查询,通过
OPTION (USE PLAN)强制复用原有计划:DECLARE @parameter1 [替换为原参数的实际数据类型], @parameter2 [替换为原参数的实际数据类型] SET @parameter1 = '你的特定测试值' SET @parameter2 = '你的特定测试值' SELECT 1, 2, 3 FROM MyTable WHERE Column1 = @parameter1 AND Column2 = @parameter2 OPTION (USE PLAN N'<将上面获取的执行计划XML内容粘贴到这里>')
方法2:通过查询存储重用执行计划
如果你的数据库已开启查询存储:
- 在SSMS的“数据库”节点下找到“查询存储”,展开后选择“顶级资源消耗查询”或“查询存储 > 查询”。
- 搜索匹配到目标SQL语句,右键选择“查看执行计划”。
- 在执行计划窗口中点击“执行”按钮,输入你指定的参数值,系统会自动复用原有执行计划执行查询。
方法3:保持参数化一致性自动复用计划
原查询是参数化格式,只要你在SSMS中执行的查询与原查询参数名、类型完全一致,SQL Server会自动复用缓存中的原有执行计划:
DECLARE @parameter1 [替换为原参数的实际数据类型], @parameter2 [替换为原参数的实际数据类型] SET @parameter1 = '你的特定测试值' SET @parameter2 = '你的特定测试值' SELECT 1, 2, 3 FROM MyTable WHERE Column1 = @parameter1 AND Column2 = @parameter2
执行前可通过以下语句确认缓存中是否存在该计划:
SELECT cp.usecounts, qp.query_plan FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) qp WHERE st.text LIKE '%SELECT 1, 2, 3 FROM MyTable WHERE Column1 = @parameter1%'
注意事项
- 确保参数数据类型与原查询完全匹配,否则可能触发新的执行计划生成。
- 若原有执行计划是因参数嗅探生成,强制复用前需确认该计划对当前测试参数的合理性,但按需求需保持原有计划不变,可忽略此验证。
内容的提问来源于stack exchange,提问作者Liero
相关产品推荐
相关产品推荐

