집 >데이터 베이스 >MySQL 튜토리얼 >NULL 매개 변수가 있어도 저장 프로시저에 성능 문제가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?
매개변수 스니핑 및 저장 프로시저 실행 계획 성능
저장 프로시저가 @MyDate를 NULL로 사용하여 실행될 때 성능 문제가 발생합니다. 생성된 실행 계획이 최적이 아닙니다. 이 문제는 @MyDate가 실제로 NULL인지 또는 IF 문에 의해 현재 타임스탬프로 설정되었는지 여부에 관계없이 지속됩니다.
문제가 있는 실행 계획은 SQL Server가 다음을 기반으로 저장 프로시저를 컴파일하는 매개 변수 스니핑으로 인해 발생하는 것으로 생각됩니다. 컴파일 시 제공된 매개변수 값. 그러나 이 경우 매개변수가 NULL인 경우에도 문제가 발생하며 이는 일반적인 매개변수 스니핑 시나리오와 모순됩니다.
매개변수(@MyDate_Copy)를 스푸핑하여 매개변수 스니핑을 비활성화하면 문제가 해결됩니다. 이는 서버가 임의의 NULL 값을 기반으로 잘못된 실행 계획을 사용하고 있음을 시사합니다.
현상에 대한 통찰
받아들인 답변에 따르면 SQL의 매개변수 스니핑 Server 2005에는 잘못된 실행 계획을 초래할 수 있는 문제가 있는 것으로 알려져 있습니다. 매개변수가 NULL인 경우에도 서버는 대표성이 없는 매개변수 값을 기반으로 비효율적인 계획을 생성하는 것으로 추측됩니다. 또한 LEFT JOIN 및 NULL 관련 문제가 발견되었으며 이를 NOT IN 또는 NOT EXISTS로 대체하여 해결했습니다.
해결책
SQL Server 2008의 경우 OPTIMIZE FOR UNKNOWN 옵션을 활용하면 문제를 완화할 수 있습니다.
위 내용은 NULL 매개 변수가 있어도 저장 프로시저에 성능 문제가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!