USE AdventureWorks
GO
FROM HumanResources.EmployeePayHistory
WHERE EmployeeID = 24
GO
SET @EmployeeID = 24
FROM HumanResources.EmployeePayHistory
WHERE EmployeeID = @EmployeeID
GO
상수에 의한 실행계획을 확인한다.
왜냐, equal 검색은 변수로 받을 경우 10% data 가정으로 찾고, range seek는 15% 가정하고 진행한다.
그렇기 때문에 모든 테스트 및 실행계획 할 때에는 상수값을 이용하여 확인할 것..
2009.03.24
2009.04.07
위의 내용은 SQL2000/2005 튜닝 - 정원혁 저 P.288 참조
상수 폴딩(Constant folding) 이라고 한다.
쿼리 처리 과정
1. 구문 분석(parsing)
2. 표준화(Standardization)
3. 최적화(Optimization)
4. 컴파일(Compilation)
5. 실행(Execute)
최적화기는 통계 정보의 해당 행에 대한 빈도, 즉 분포도(Histogram)를 사용하여 해당 행이 몇%나 되는지 계산하고 각각 테이블 스캔, 인덱스 검색이라는 제대로된 플랜을 만들어 낸다.
하지만, 변수로 받아질 경우,,, 최적화기는 분포도(Histogram)을 사용하지 못하고, 단지 해당 테이블에서 임의의 값 하나를 가져올 경우에 해당하는 밀도를 판단 한다. <<-- 아하,,,
그중,,,all density value를 확인하여 사용하게 되는데, 예 1.1392~
요건,,,, 내일 회사 가서 다시 테스트 해보자...
'Etc' 카테고리의 다른 글
Mastering DBA Soft Skills (2) | 2009.10.28 |
---|---|
NULL의 형태? (0) | 2009.06.29 |
053. sc 명령을 이용한 서비스 설정 (0) | 2009.03.13 |
single page or multi page allocate (0) | 2009.03.13 |
delete dml 을 ddl 로 고치기 (특수한 업무의 효율을 높이기 위해서 ) (0) | 2009.01.06 |