Operador de plan de presentación de búsqueda de claves

Introducido en el Service Pack 2 de SQL Server 2005, el operador Key Lookup es una búsqueda de marcadores en un tabla con un índice agrupado. La columna Argument contiene el nombre del índice agrupado y la clave de agrupación utilizada para buscar la fila en el índice agrupado. Key Lookup está siempre acompañado por un operador Nested Loops. Si en la columna Argument aparece la cláusula WITH PREFETCH, el procesador de consultas habrá determinado que resulta óptimo utilizar una captura previa asincrónica (lectura anticipada) al buscar marcadores en el índice agrupado. Para obtener más información acerca de la lectura anticipada, vea Leer páginas.

En versiones anteriores de SQL Server 2005, la funcionalidad de búsqueda de marcadores se muestra mediante el operador Clustered Index Seek con la palabra clave LOOKUP. En el SP2, el icono del operador Key Lookup aparece en el plan de ejecución gráfico; sin embargo, cuando se muestra el plan de ejecución en formato XML o de texto, el resultado muestra el operador Clustered Index Seek con la palabra clave LOOKUP.

El uso de un operador Key Lookup en un plan de consulta indica que la consulta puede beneficiarse de la optimización del rendimiento. Por ejemplo, el rendimiento de las consultas se puede mejorar agregando un índice de cobertura.

Icono del operador Bookmark LookupIcono del plan de ejecución gráfico

Ejemplos

En el ejemplo siguiente se ejecuta una consulta simple, se modifica un índice no agrupado para cubrir la consulta y, a continuación, se vuelve a ejecutar la consulta para observar la diferencia en el plan de ejecución de consultas. Al mostrar el plan de ejecución gráfico para esta consulta, puede ver que el plan para la primera ejecución de la consulta muestra que el operador Key Lookup se utiliza para recuperar los datos de GroupName del índice agrupado de la tabla HumanResources.Department.

El plan también muestra que se utiliza el índice no agrupado AK_Department_Name para satisfacer el predicado de cláusula WHERE de la consulta. Al modificar este índice para incluir la columna GroupName, el índice puede abarcar la consulta y el plan de consulta contendrá sólo una operación de Index Seek. El tiempo para ejecutar la consulta se reduce de manera significativa.

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