Оператор 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 в плане запроса указывает, что запрос может выиграть от настройки производительности. Например, производительность запроса можно повысить, добавив покрывающий индекс.
Значок графического плана выполнения
Примеры
Следующий пример выполняет простой запрос, изменяет некластеризованный индекс для покрытия запроса и повторно выполняет запрос, чтобы определить разницу в плане выполнения. Отобразив графический план выполнения для этого запроса, можно видеть, что в плане первого выполнения запроса оператор 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)
Индекс с включенными столбцами