web-dev-qa-db-ja.com

多くの計画を作成するパラメーター化されたクエリ

パラメータ化されたクエリがいくつかありますが、それらはまだ毎回新しい実行プランを作成しています。 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 and the queries

3
Hardik Talwar

@P1の長さは、これらすべてで異なります。

コードでパラメーターの長さを明示的に設定していないため、さまざまな計画が発生しています。

文字列の違いは、どんなにマイナーであっても、新しいプランを生成します。データ型のサイズ、スペース、コメント、それらすべてがプランキャッシュに新しいエントリを引き起こします。 これは問題を説明するデモビデオです。

9
Erik Darling