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
動的SQLは各実行時に解析される必要があります(ただし、実行計画は隠されている可能性があります)。通常のSQLは直接コンパイルできます。トランザクションを実行している場合は、これが問題になる可能性があります。クエリがもう少し複雑な場合、コンパイルのための追加作業はおそらく問題ではありません。 –
パフォーマンスの差はごくわずかですが、実際に必要としない限り動的SQLを使用しないでください。これは、メンテナンスが難しくなるためです。それは本当に重要ではないという結論につながります。動的SQLが必要な場合は、標準クエリを使用できません。 –