2

大きなクエリだった場合は、2番目のストアドプロシージャで高速になりますか?対EXEC sp_executesqlと直接SQLの使用には速度差があります

CREATE PROCEDURE Customers_GetCustomer 
     @CustId CHAR(5) 
AS 
BEGIN 
     DECLARE @SQL NVARCHAR(2000) 
     SET @SQL = 'SELECT ContactName FROM Customers WHERE CustomerId = @CustomerId' 
     EXEC sp_executesql @SQL, N'@CustomerId CHAR(5)', @CustomerId = @CustId 
END 

CREATE PROCEDURE Customers_GetCustomer 
     @CustId CHAR(5) 
AS 
BEGIN 
     SELECT ContactName FROM Customers WHERE CustomerId = @CustId 
END 
+1

動的SQLは各実行時に解析される必要があります(ただし、実行計画は隠されている可能性があります)。通常のSQLは直接コンパイルできます。トランザクションを実行している場合は、これが問題になる可能性があります。クエリがもう少し複雑な場合、コンパイルのための追加作業はおそらく問題ではありません。 –

+1

パフォーマンスの差はごくわずかですが、実際に必要としない限り動的SQLを使用しないでください。これは、メンテナンスが難しくなるためです。それは本当に重要ではないという結論につながります。動的SQLが必要な場合は、標準クエリを使用できません。 –

答えて

2

このような単純なクエリでは、さえ処刑/秒の1000年代にほとんど違いはありません。

複雑なクエリでは、実行キャッシュと一致するように長い文字列をハッシュするだけのオーバーヘッドが追加されることになります。

しかし、私はそれを自分で試してみることをお勧めします。例えば、https://www.brentozar.com/archive/2015/05/how-to-fake-load-tests-with-sqlquerystress/です。

関連する問題