创建许多计划的参数化查询

时间:2018-08-29 12:31:51

标签: sql sql-server sql-server-2016 sqlperformance parameterized-query

我有一些已被参数化的查询,每次使用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

1 个答案:

答案 0 :(得分:0)

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

  • 确保所有这些代码都在存储过程中。即使有参数,存储过程也很可能重用同一计划。
  • 我不会重复Nisarg Shah在评论中所说的,因为您似乎已经解决了这些问题,但是这些都是非常有效的检查对象。
  • 这听起来很怪异,但尽可能使代码完全合格。以我的经验,如果这样设计的话,更有可能找到现有的计划:

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

通常,我不会像这样写我的查询,因为它们似乎很难阅读,但是过去,当我获得大量计划时,它对我有用。