2009.03.07 SQL Off-Study


USE AdventureWorks
GO
SELECT *
FROM HumanResources.EmployeePayHistory
WHERE EmployeeID = 24
GO
DECLARE @EmployeeID int
SET @EmployeeID = 24
SELECT *
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~


요건,,,, 내일 회사 가서 다시 테스트 해보자...