Оператор Key Lookup инструкции Showplan

Добавления: 12 декабря 2006 г.

Оператор Key Lookup, появившийся в SQL Server 2005 с пакетом обновления 2 (SP2), выполняет поиск закладок в таблице с кластеризованным индексом. Столбец Аргумент содержит имя кластеризованного индекса и ключ кластеризации, который используется для поиска строки в кластеризованном индексе. Оператор Key Lookup всегда сопровождается оператором Nested Loops. Если в столбце Аргумент присутствует предложение WITH PREFETCH, обработчик запросов определяет, что оптимальным решением при поиске закладки в таблице или кластеризованном индексе будет применение асинхронной упреждающей выборки (упреждающего чтения). Дополнительные сведения об упреждающем чтении см. в разделе Считывание страниц.

В ранних версиях SQL Server 2005 функциональные возможности поиска закладки показаны оператором Clustered Index Seek с ключевым словом LOOKUP. В версии с пакетом обновления 2 (SP2) графический план выполнения выводит значок оператора Key Lookup, но если план выполнения отображается в XML-формате или текстовом формате, выводится оператор Clustered Index Seek с ключевым словом LOOKUP.

Использование оператора Key Lookup в плане запроса указывает, что запрос может выиграть от настройки производительности. Например, производительность запроса можно повысить, добавив покрывающий индекс.

Значок оператора Bookmark LookupЗначок графического плана выполнения

Примеры

Следующий пример выполняет простой запрос, изменяет некластеризованный индекс для покрытия запроса и повторно выполняет запрос, чтобы определить разницу в плане выполнения. Отобразив графический план выполнения для этого запроса, можно видеть, что в плане первого выполнения запроса оператор Key Lookup используется для получения данных GroupName из кластеризованного индекса в таблице HumanResources.Department.

В плане также показано, что некластеризованный индекс AK_Department_Name применяется для удовлетворения условий предложения WHERE предиката запроса. Изменив этот индекс, чтобы он включал столбец GroupName, можно сделать так, что индекс сможет покрыть запрос, поэтому план запроса содержит только операцию поиска. Время выполнения запроса значительно сокращено.

USE AdventureWorks;
GO
SELECT GroupName
FROM HumanResources.Department
WHERE Name = 'Engineering';
GO
-- Create a covering index by adding GroupName to the nonclustered index.
CREATE UNIQUE NONCLUSTERED INDEX AK_Department_Name
    ON HumanResources.Department ( Name ASC, GroupName)
    WITH (DROP_EXISTING = ON);
GO
SELECT GroupName
FROM HumanResources.Department
WHERE Name = 'Engineering';
GO

См. также

Задачи

Как отобразить фактический план выполнения

Справочник

Оператор Clustered Index Seek инструкции Showplan
Оператор Nested Loops инструкции Showplan

Основные понятия

Справочник по логическим и физическим операторам
Отображение планов выполнения с помощью параметров Showplan инструкции SET (Transact-SQL)
Индекс с включенными столбцами

Справка и поддержка

Получение помощи по SQL Server 2005