Key Lookup 실행 계획 연산자
SQL Server 2005 서비스 팩 2에 새로 추가된 Key Lookup 연산자는 클러스터형 인덱스가 있는 테이블의 책갈피 조회입니다. Argument 열에는 클러스터형 인덱스의 이름과 클러스터형 인덱스에서 행을 조회할 때 사용되는 클러스터링 키가 포함됩니다. Key Lookup은 항상 Nested Loops 연산자와 함께 사용됩니다. WITH PREFETCH 절이 Argument 열에 나타나는 경우에 쿼리 프로세서에서는 클러스터형 인덱스에서 책갈피를 조회할 때 비동기 사전 인출(미리 읽기)을 사용하는 것을 최적의 방법으로 결정합니다. 미리 읽기에 대한 자세한 내용은 페이지 읽기를 참조하십시오.
SQL Server 2005 이전 버전에서는 키워드 LOOKUP과 함께 Clustered Index Seek 연산자를 사용하여 책갈피 조회 기능을 표시합니다. SP2에서 Key Lookup 연산자 아이콘은 그래픽 실행 계획에 표시되지만 XML이나 텍스트 형식으로 실행 계획을 표시할 때 출력에서는 키워드 LOOKUP과 함께 Clustered Index Seek 연산자가 표시됩니다.
쿼리 계획에서 Key Lookup 연산자를 사용하는 것은 쿼리에서 성능 튜닝의 장점을 활용할 수 있음을 나타냅니다. 예를 들어 포함 인덱스를 추가하여 쿼리 성능을 향상시킬 수 있습니다.
그래픽 실행 계획 아이콘
예
다음 예에서는 단순 쿼리를 실행하고 해당 쿼리를 포함하도록 비클러스터형 인덱스를 수정한 다음 쿼리를 다시 실행하여 쿼리 실행 계획에서 차이점을 살펴봅니다. 이 쿼리에 대한 그래픽 실행 계획을 표시하면 첫 번째 쿼리 실행 계획에 Key Lookup 연산자가 HumanResources.Department 테이블의 클러스터형 인덱스에서 GroupName 데이터를 검색하는 데 사용되는 것이 표시됨을 볼 수 있습니다.
이 계획에서는 비클러스터형 인덱스 AK_Department_Name이 쿼리의 WHERE 절 조건자를 만족시키는 데 사용되는 것도 보여 줍니다. GroupName 열을 포함하도록 이 인덱스를 수정하면 해당 인덱스는 쿼리를 포함할 수 있으며 쿼리 계획은 Index Seek 연산만 포함합니다. 쿼리를 실행하는 시간이 크게 줄어듭니다.
USE AdventureWorks2008R2;
GO
SELECT GroupName
FROM HumanResources.Department
WHERE Name = 'Engineering';
GO
-- Create a covering index by adding GroupName to the nonclustered index.
USE AdventureWorks2008R2;
GO
CREATE UNIQUE NONCLUSTERED INDEX AK_Department_Name
ON HumanResources.Department ( Name ASC, GroupName)
WITH (DROP_EXISTING = ON);
GO
USE AdventureWorks2008R2;
GO
SELECT GroupName
FROM HumanResources.Department
WHERE Name = 'Engineering';
GO