Operador de plano de execução Key Lookup

Apresentado no SQL Server 2005 Service Pack 2, o operador Key Lookup é uma pesquisa de indicadores em uma tabela com um índice clusterizado. A coluna Argumento contém o nome do índice clusterizado e a chave de clustering usada para procurar a linha no índice clusterizado. Key Lookup é sempre acompanhada por um operador Loops. Se a cláusula WITH PREFETCH aparecer na coluna Argumento, o processador de consultas determinará que convém usar pré-busca assíncrona (read-ahead) ao observar marcadores no índice clusterizado. Para obter mais informações sobre read-ahead, consulte Lendo páginas.

Em versões anteriores do SQL Server 2005, a funcionalidade de pesquisa de indicador é mostrada usando-se o operador Clustered Index Seek com a palavra-chave LOOKUP. No SP2, o ícone do operador Key Lookup é exibido no plano de execução gráfica; porém, ao exibir o plano de execução em XML ou formato de texto, a saída mostra o operador Clustered Index Seek com a palavra-chave LOOKUP.

O uso de um operador Key Lookup em um plano de consulta indica que a consulta pode se beneficiar de ajuste de desempenho. Por exemplo, o desempenho da consulta pode ser melhorado adicionando-se um índice de cobertura.

Ícone do operador Bookmark lookupÍcone de plano de execução gráfica

Exemplos

O exemplo a seguir executa uma consulta simples, modifica um índice não-clusterizado para cobrir a consulta e, em seguida, executa novamente a consulta para observar a diferença no plano de execução de consulta. Exibindo-se o plano de execução gráfica para essa consulta, pode-se ver que o plano para a primeira execução da consulta mostra que o operador Key Lookup é usado para recuperar os dados GroupName do índice clusterizado na tabelaHumanResources.Department .

O plano também mostra que o índice não-clusterizado AK_Department_Name é usado para satisfazer o predicado de cláusula WHERE da consulta. Modificando-se esse índice para incluir a coluna GroupName, o índice pode cobrir a consulta e o plano de consulta contém somente uma operação de busca de índice. O tempo para execução da consulta é reduzido significativamente.

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