Поделиться через


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

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

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

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

Clustered Index Seek — это логический и физический оператор.

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

Примеры

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

USE AdventureWorks;
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:([AdventureWorks].[Production].[UnitMeasure].[PK_UnitMeasure_UnitMeasureCode]), 
SEEK:([AdventureWorks].[Production].[UnitMeasure].[UnitMeasureCode] >= 
    CONVERT_IMPLICIT(nvarchar(4000),[@1],0) AND 
    [AdventureWorks].[Production].[UnitMeasure].[UnitMeasureCode] 
<= CONVERT_IMPLICIT(nvarchar(4000),[@2],0)) ORDERED FORWARD