Key Lookup Showplan 運算子

Key Lookup 運算子是 SQL Server 2005 Service Pack 2 新增的功能,可在包含叢集索引的資料行上進行書籤查閱。Argument 資料行包含叢集索引的名稱和叢集索引鍵,可用來查閱叢集索引中的資料列。Key Lookup 一律都會伴隨 Nested Loops 運算子。如果 Argument 資料行中出現 WITH PREFETCH 子句,表示查詢處理器已決定在叢集索引中查詢書籤時,使用非同步預先提取 (預先讀取) 是最佳的。如需有關預先讀取的詳細資訊,請參閱<讀取分頁>。

在舊版 SQL Server 2005 中,書籤查閱功能是使用 Clustered Index Seek 運算子加上關鍵字 LOOKUP 顯示的。在 SP2 中,Key Lookup 運算子圖示會顯示在圖形執行計畫中,不過,當以 XML 或文字格式顯示執行計畫時,輸出會顯示 Clustered Index Seek 運算子加上關鍵字 LOOKUP。

在查詢計畫中使用 Key Lookup 運算子,表示查詢可以進行效能微調。例如,您可以新增涵蓋索引來提高查詢效能。

書籤查閱運算子圖示圖形化執行計畫圖示

範例

下列範例會執行簡單的查詢、將非叢集索引修改為涵蓋查詢,然後再重新執行查詢,觀察查詢執行計畫的差異。藉由顯示這個查詢的圖形執行計畫,您可以看到第一次執行查詢的計畫顯示使用 Key Lookup 運算子,從 HumanResources.Department 資料表上的叢集索引擷取 GroupName 資料。

計畫也會顯示使用非叢集索引 AK_Department_Name 來滿足查詢的 WHERE 子句述詞。藉由修改這個索引來包含 GroupName 資料行,索引便可涵蓋查詢,而查詢計畫只會包含索引搜尋作業。執行查詢的時間便會大幅縮短。

USE AdventureWorks2008R2;
GO
SELECT GroupName
FROM HumanResources.Department
WHERE Name = 'Engineering';
GO
-- Create a covering index by adding GroupName to the nonclustered index.
USE AdventureWorks2008R2;
GO
CREATE UNIQUE NONCLUSTERED INDEX AK_Department_Name
    ON HumanResources.Department ( Name ASC, GroupName)
    WITH (DROP_EXISTING = ON);
GO
USE AdventureWorks2008R2;
GO
SELECT GroupName
FROM HumanResources.Department
WHERE Name = 'Engineering';
GO