我正在处理一个我似乎无法解决的问题。我得到的这个存储过程存在速度问题。大约需要 35 秒。当运行adhoc时,它会立即完成。
这让我觉得这与参数嗅探有关。我尝试重写它以使用局部变量,优化未知\变量\等,并重新编译。
进行扫描的表很大,但即使使用 更新统计数据fullscan
,估计值仍然相差很大。也许可以重写查询,但我想弄清楚这一点。
来自测试环境的所有数据,其名称已更改。sql 文本文件用于 sp 和临时查询 - 如果这不起作用,请告诉我
特别计划 - https://www.brentozar.com/pastetheplan/?id=Hkvg5Ge40
ad hoc的参数-
SP 计划 - https://www.brentozar.com/pastetheplan/?id=S1w49GxER
SP 参数 -
参数如下:
(sp name)
@ TransactionDescriptionId VARCHAR(32),
@ CategoryCode VARCHAR(4000)
AS
DECLARE
@ CategoryHash VARBINARY(16) = HashBytes('MD5', @CategoryCode);
SP 和ad hoc版本中传递的值相同。我认为这可能是由于哈希被创建为传递参数的局部变量,但在临时版本中它做了同样的事情(对我来说)。