OPTIMIZE FOR 쿼리힌트가 생겼다. (2005 버전 이후) OPTIMIZE FOR는 로컬변수를 사용할 때 옵티마이저가 로컬변수의 불확실성으로 최적화된 쿼리계획을 세우지 못할 경우 옵티마이저에게 통계정보를 잘 이용 할 수 있도록 값을 제공하기 위하여 사용된다. OPTIMIZE FOR에 명시된 값은 쿼리 최적화될 때만 사용되고 실행할 때는 사용되지 않는다. (로컬변수 사용시의 문제점은
Magic Density를 참고하라.)
USE AdventureWorks;
GO
EXEC sp_helpindex 'Person.Address';
/*
rowguid
AddressLine1, AddressLine2, City, StateProvinceID, PostalCode
StateProvinceID
AddressID
*/
create index nix_postal_code
on Person.Address(PostalCode);
go
DECLARE @city_name nvarchar(30);
DECLARE @postal_code nvarchar(15);
SET @postal_code = 86171;
--sql1
SELECT * FROM Person.Address
WHERE City = @city_name AND PostalCode = @postal_code
OPTION ( OPTIMIZE FOR (@city_name = 'Seattle', @postal_code UNKNOWN) );