Opérateur Key Lookup Showplan

Introduit dans SQL Server 2005 Service Pack 2, l'opérateur Key Lookup est une recherche de signet sur une table avec un index cluster. La colonne Argument contient le nom de l'index cluster et la clé de cluster utilisée pour rechercher la ligne dans l'index cluster. Key Lookup est toujours accompagné par un opérateur Nested Loops. Si la clause WITH PREFETCH apparaît dans la colonne Argument, cela signifie que le processeur de requêtes a décidé que la prélecture asynchrone constitue la solution optimale pour la recherche de signets dans l'index cluster. Pour plus d'informations sur la lecture anticipée, consultez Lecture de pages.

Dans les versions précédentes de SQL Server 2005, la fonctionnalité de recherche de signet s'affiche à l'aide de l'opérateur Clustered Index Seek avec le mot clé LOOKUP. Dans SP2, l'icône de l'opérateur Key Lookup s'affiche dans le plan d'exécution graphique ; cependant, lors de l'affichage du plan d'exécution au format XML ou texte, la sortie affiche l'opérateur Clustered Index Seek avec le mot clé LOOKUP.

L'utilisation d'un opérateur Key Lookup dans un plan de requête indique que la requête peut bénéficier du réglage des performances. Par exemple, l'ajout d'un index explicatif peut améliorer les performances des requêtes.

Icône d'opérateur Bookmark LookupIcône du plan d'exécution graphique

Exemple

L'exemple suivant exécute une requête simple, modifie un index non-cluster pour inclure la requête, puis réexécute la requête pour observer la différence dans le plan d'exécution de requête. En affichant le plan d'exécution graphique de cette requête, vous pouvez constater que le plan de la première exécution de la requête indique que l'opérateur Key Lookup est utilisé pour extraire les données GroupName de l'index cluster dans la table HumanResources.Department.

Le plan indique aussi que l'index non-cluster AK_Department_Name est utilisé pour satisfaire au prédicat de la clause WHERE de la requête. En modifiant cet index pour inclure la colonne GroupName, l'index peut inclure la requête et le plan de requête ne contient qu'une opération de recherche d'index. La durée d'exécution de la requête s'en trouve grandement réduite.

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