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/입니다.