다음과 같은 저장된 절차를 고려하십시오. @mydate datetime = null 처럼 @mydate가 null set @mydate = current_timestamp입니다 -이 시나리오에서 @mydate 를 사용하여 무언가를 수행하십시오. @mydate가 초기 컴파일 중에 null로 전달되면 데이터베이스는이 값의 실행 계획을 최적화합니다. 그러나 다른 입력 값이있는 절차에 대한 후속 호출은 해당 값이 무효화 되더라도 성능이 저하 될 수 있습니다.
CREATE PROCEDURE MyProc @MyDate DATETIME = NULL AS IF @MyDate IS NULL SET @MyDate = CURRENT_TIMESTAMP -- Do Something using @MyDate
매개 변수 스니핑은 몇 가지 부정적인 결과를 가질 수 있습니다 :
절차는 전달 된 입력 값에 따라 크게 다를 수 있으며, 예측할 수없는 실행 시간을 초래할 수 있습니다.
솔루션 : 매개 변수 스니핑
매개 변수를 비활성화하는 것은 다음과 같이 매개 변수를 사용하여 매개 변수 스니핑을 비활성화하는 것입니다. @mydate datetime = null 처럼 @mydate_copy datetime을 선언합니다 @mydate_copy = @mydate를 설정합니다 @mydate_copy가 null set @mydate_copy = current_timestamp입니다 - @mydate_copy
문제에 대한 통찰력
SQL Server 2005의 기본 문제는 특정 패치 수준에서 매개 변수 스니핑에서 알려진 문제입니다. SQL Server 2008에서는 알 수없는 조항에 대한 최적화는 그러한 문제를 해결하는 데 사용될 수 있습니다.
CREATE PROCEDURE MyProc @MyDate DATETIME = NULL AS IF @MyDate IS NULL SET @MyDate = CURRENT_TIMESTAMP -- Do Something using @MyDate
추가 고려 사항
입력 매개 변수와 함께 저장된 프로 시저를 추가로 향상시킬 때 :
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3