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

Оператор Clustered Index Seek использует возможности поиска по индексам для получения строк из кластеризованного индекса. Столбец Argument содержит имя используемого кластеризованного индекса и предикат SEEK:(). Подсистема хранилища использует этот индекс для обработки только тех строк, которые удовлетворяют данному предикату SEEK:(). Также может включаться предикат WHERE:(), в котором подсистема хранилища вычисляет выражение для всех строк, удовлетворяющих предикату SEEK:(), но это не является обязательным и не использует индексы для завершения процесса.

Если столбец Argument содержит предложение ORDERED, то обработчик запросов определяет, что строки необходимо возвращать в том порядке, в котором их отсортировал кластеризованный индекс. Если предложение ORDERED отсутствует, подсистема хранилища выполняет поиск индекса оптимальным способом, без обязательной сортировки выходных данных. Сохранять порядок выходных данных является менее эффективным, чем формировать несортированные выходные данные.

При указании ключевого слова LOOKUP выполняется поиск закладок. В SQL Server 2008 оператор Key Lookup обеспечивает функцию поиска закладок.

Clustered Index Seek является логическим и физическим оператором.

Значок оператора Clustered index seekЗначок графических планов выполнения

Примеры

В следующем примере выбирается строка из таблицы с кластеризованным индексом. Результаты плана выполнения показывают, что в оптимизаторе запросов используется оператор Clustered Index Seek для получения указанных строк.

USE AdventureWorks2008R2;
GO
SET NOCOUNT ON;
GO
SET SHOWPLAN_ALL ON;
GO
SELECT Name
FROM Production.UnitMeasure
WHERE UnitMeasureCode BETWEEN 'Each' AND 'Inch';
GO
SET SHOWPLAN_ALL OFF;

Ниже приводятся выходные данные плана выполнения оператора Clustered Index Seek.

PhysicalOp

-----------------------------------------------------------------------

Clustered Index Seek

Argument

-----------------------------------------------------------------------

OBJECT:([AdventureWorks2008R2].[Production].[UnitMeasure].[PK_UnitMeasure_UnitMeasureCode]),

SEEK:([AdventureWorks2008R2].[Production].[UnitMeasure].[UnitMeasureCode] >=

CONVERT_IMPLICIT(nvarchar(4000),[@1],0) AND

[AdventureWorks2008R2].[Production].[UnitMeasure].[UnitMeasureCode]

<= CONVERT_IMPLICIT(nvarchar(4000),[@2],0)) ORDERED FORWARD