叢集索引搜尋 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