参数化查询创建许多计划

问题描述 投票:0回答:1

我有一些参数化的查询,他们每次都在创建新的执行计划,我正在使用SQL Server 2016

查询如下:

(@P1 varchar(1043),@P2 varchar(6))
UPDATE table 
SET FILEDATA=@P1 
WHERE FILEID=@P2

此查询未使用缓存中已生成的执行计划,而是每次执行时都创建新计划

This image shows the plancount an individual query is creating

sql sql-server sql-server-2016 sqlperformance parameterized-query
1个回答
0
投票

我过去曾经遇到过这种情况,以下内容为我解决了这个问题:

  • 确保所有此代码都在存储过程中。即使使用params,存储过程也更有可能重用相同的计划。
  • 我不会重复Nisarg Shah在评论中所说的内容,因为看起来你已经解决了这些问题,但这些都是非常有效的事情要检查。
  • 这可能听起来很奇怪,但尽可能完全符合代码。根据我的经验,如果现有的计划如果有这样的问题,则更有可能找到现有的计划: (@P1 varchar(1043),@P2 varchar(6)) UPDATE database.dbo.table SET database.dbo.table.FILEDATA=@P1 WHERE database.dbo.FILEID=@P2

通常情况下,我不会这样写我的查询,因为它们似乎有点难以阅读,但是当我得到大量计划时,它对我来说很有用。

© www.soinside.com 2019 - 2024. All rights reserved.