Key Lookup (Showplanoperator)

Der Operator Key Lookup wurde mit SQL Server 2005 Service Pack 2 eingeführt und stellt ein Bookmark Lookup für eine Tabelle mit einem gruppierten Index dar. Die Argument-Spalte enthält den Namen des gruppierten Indexes und den Gruppierungsschlüssel, der für die Suche nach der Zeile im gruppierten Index verwendet wird. Key Lookup wird stets von einem Nested Loops-Operator begleitet. Wenn die WITH PREFETCH-Klausel in der Argument-Spalte auftritt, wurde vom Abfrageprozessor ermittelt, dass Lesezeichen im gruppierten Index optimalerweise mit asynchronem Vorauslesen (Read-Ahead) nachgeschlagen werden sollten. Weitere Informationen zum Vorauslesen finden Sie unter Lesen von Seiten.

In früheren Versionen von SQL Server 2005 wird die Bookmark Lookup-Funktionalität mithilfe des Clustered Index Seek-Operators mit dem Schlüsselwort LOOKUP angezeigt. In SP2 wird das Symbol des Key Lookup-Operators im grafischen Ausführungsplan angezeigt; wenn der Ausführungsplan jedoch im XML- oder Textformat angezeigt wird, wird der Clustered Index Seek-Operator in der Ausgabe mit dem Schlüsselwort LOOKUP angezeigt.

Durch die Verwendung eines Key Lookup-Operators in einem Abfrageplan wird angegeben, dass für die Abfrage eine Leistungsoptimierung von Vorteil sein könnte. Beispielsweise kann die Leistung durch Hinzufügen eines abdeckenden Indexes optimiert werden.

Bookmark Lookup-Operator (Symbol)Symbol im grafischen Ausführungsplan

Beispiele

Im folgenden Beispiel wird eine einfache Abfrage ausgeführt, ein nicht gruppierter Index so geändert, dass die Abfrage berücksichtigt wird, und anschließend wird die Abfrage erneut ausgeführt, damit der Unterschied im Abfrageausführungsplan deutlich wird. Wenn Sie den grafischen Ausführungsplan für diese Abfrage anzeigen, erkennen Sie, dass der Plan für die erste Ausführung der Abfrage verdeutlicht, dass der Key Lookup-Operator zum Abrufen der GroupName-Daten aus dem gruppierten Index für die HumanResources.Department-Tabelle verwendet wird.

Anhand des Plans wird zudem deutlich, dass der nicht gruppierte Index AK_Department_Name zum Erfüllen des Prädikats der WHERE-Klausel für die Abfrage verwendet wird. Wenn dieser Index so geändert wird, dass er die GroupName-Spalte enthält, kann der Index die Abfrage umfassen, und der Abfrageplan enthält nur einen Indexsuchvorgang. Die Zeit zum Ausführen der Abfrage wird deutlich verkürzt.

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