Key Lookup Showplan Operator

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 操作を使用することは、パフォーマンスのチューニングによってクエリ パフォーマンスが向上する可能性があることを示します。たとえば、カバリング インデックスを追加することにより、クエリ パフォーマンスが向上する場合があります。

Bookmark Lookup 操作アイコングラフィカルな実行プランのアイコン

次の例では、単純なクエリを実行して、非クラスタ化インデックスをクエリをカバーするように変更した後、そのクエリを再実行し、クエリ実行プランの違いを調べます。このクエリのグラフィカルな実行プランを表示することによって、最初に実行したクエリのプランでは、HumanResources.Department テーブルのクラスタ化インデックスから GroupName データを取得する際に Key Lookup 操作が使用されていることを示していることがわかります。

また、このプランでは、クエリの WHERE 句の述語に適合するように非クラスタ化インデックス AK_Department_Name が使用されていることもわかります。このインデックスを 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