You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server执行计划缓存中plan_handle不一致问题咨询

SQL Server执行计划缓存问题解答

场景1:WHERE子句参数不同导致plan_handle不同但哈希值一致

你的预期存在偏差,具体原因如下:

  • plan_handle 是SQL Server缓存中执行计划的唯一标识,它的生成依赖于查询文本的精确匹配以及执行环境的一致性。如果你的两条查询是硬编码不同参数值(比如 WHERE Country = 'AR' 和 WHERE Country = 'BR'),而非使用参数化查询(如 sp_executesql 或声明变量传入参数),SQL Server会将它们视为两条不同的查询语句,因此生成不同的 plan_handle。
  • query_hash 和 query_plan_hash 一致,说明这两条查询的逻辑结构和最终生成的执行计划完全等价。这两个哈希值是基于查询的逻辑语义和执行计划的物理结构计算的,和硬编码的参数值无关。

要实现执行计划复用,你需要使用参数化查询,让SQL Server将不同的参数值视为同一查询的不同输入,而非不同的查询语句。

场景2:表名大小写不同导致plan_handle不同

这种情况的核心原因是查询文本的精确字符匹配规则:

  • SQL Server对查询文本的匹配是逐字符精确匹配,即使数据库排序规则设置为大小写不敏感,查询文本中 Countries 和 countries 的字符大小写差异,仍会被判定为不同的查询语句,因此生成不同的 plan_handle。
  • 如果数据库排序规则是区分大小写的(如 SQL_Latin1_General_CP1_CS_AS),Countries 和 countries 会被视为两个完全不同的数据库对象,此时不仅 plan_handle 不同,执行计划本身也可能存在差异。

附查询缓存内容的T-SQL脚本

SELECT 
    plan_handle,
    query_hash,
    query_plan_hash,
    TEXT AS query_text,
    query_plan
FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)
WHERE TEXT LIKE '%你的目标查询特征%'

内容的提问来源于stack exchange,提问作者DSD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:04:53