叢集索引搜尋 Showplan 運算子

Clustered Index Seek 運算子會使用索引的搜尋能力,從叢集索引中擷取資料列。Argument 資料行包含所使用的叢集索引名稱,以及 SEEK:() 述詞。儲存引擎會使用索引來處理滿足這個 SEEK:() 述詞的資料列。它也可以包含 WHERE:() 述詞,讓儲存引擎針對滿足 SEEK:() 述詞的所有資料列進行評估,但此為選擇性,且不使用索引來完成此程序。

如果 Argument 資料行包含 ORDERED 子句,表示查詢處理器已決定,資料列的傳回順序必須依照叢集索引的排序次序。如果沒有 ORDERED 子句,儲存引擎會以最佳方式搜尋索引,不需要將輸出排序。讓輸出維持次序會比產生不按次序的輸出更沒效率。

出現關鍵字 LOOKUP 時,表示正在執行書籤查閱。在 SQL Server 2008 中,Key Lookup 運算子提供書籤查閱功能。

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