아니.
이것은 예전에는 사실이었고 (더 이상 SQL Server 2000 이후로는 아니 었습니다), 사실이 아니었고 DBA는 그의 제안을 다음 과 혼동했습니다 .
스토어드 프로 시저 시작시 임시 테이블에 대한 모든 DDL 문 (인덱스 작성과 같은)을 그룹화하는 것이 중요합니다. 이러한 DDL 문을 함께 배치하면 스키마 변경으로 인한 불필요한 컴파일을 피할 수 있습니다.
이 페이지 에서이 권장 사항 에 대한 추론에 대한 다른 설명을 찾을 수 있습니다 .
이 Microsoft KB를 살펴보면 저장 프로 시저 재 컴파일의 원인이 다음 중 하나 일 수 있습니다 (SQL Server 2005+).
- 스키마가 변경되었습니다.
- 통계가 변경되었습니다.
- DNR을 다시 컴파일하십시오.
- 설정 옵션이 변경되었습니다.
- 임시 테이블이 변경되었습니다.
- 원격 행 집합이 변경되었습니다.
- 찾아보기 파마에 대한 변경되었습니다.
- 쿼리 알림 환경이 변경되었습니다.
- MPI보기가 변경되었습니다.
- 커서 옵션이 변경되었습니다.
- 재 컴파일 옵션
변수를 선언하는 것은 DDL로 계산되지 않으므로 변수를 선언하면 (예 : 테이블 변수 @table_variable
) 이러한 이벤트를 트리거 할 수 없습니다 . 변수 (테이블 변수조차도)는 T-SQL 프로그래밍 전용으로 사용되는 임시 개체입니다. 그렇기 때문에 테이블 변수에 통계 가 없고 트랜잭션에 의해 구속되지 않습니다 . 변수를 선언하면 (테이블 여부에 관계없이) proc recompile을 트리거 할 수 없습니다.
임시 테이블 (즉, 작성 #temp_table
) 또는 인덱스를, 그러나, 인 데이터베이스의 물리적 정의에 영향을 DDL. 임시 테이블 및 인덱스는 통계 및 트랜잭션 제어가있는 "실제"개체이므로이를 만들면 위 목록에서 이벤트 1, 2 또는 5가 발생하여 proc 재 컴파일이 트리거 될 수 있습니다.