Performance – Key Lookup e “Fake” Index Seek!?

O Key Lookup é utilizado para situações onde o índice não contempla todas as colunas da pesquisa, como por exemplo, você precisa encontrar o nome de uma pessoa pelo número de CPF, mas você somente possui a coluna CPF indexada por um índice não clustered, assim o Key Lookup será responsável por identificar o nome desta pessoa por meio da coluna do índice clustered que compõe os índices não clustered.

Os índices não clustered são estruturas compostas por uma ou mais colunas “indexadas” que serão utilizadas como critérios das pesquisas, e outras colunas auxiliares (included columns) utilizadas para o retorno das pesquisas, e a(s) coluna(s) do índice clustered utilizado para outros critérios mais complexos.

Uma situação interessante que ilustra bem como funciona um Key Lookup, é a utilização da técnica que denomino “Fake” Index Seek, no qual a consulta mascara um Key Lookup, obrigando o banco de dados pesquisar o índice clustered por meio de um índice não clustered (Index Seek sobre o CPF) e em seguida, pesquisar os outros campos (Codigo, Nome, Data Nascimento, CPF) por meio do índice clustered obtido (Clustered Index Seeek sobre a Primary Key), exemplo:

-- Criação da tabela
CREATE TABLE Clientes (
	Codigo INT IDENTITY PRIMARY KEY,
	Nome VARCHAR(250) NOT NULL,
	DataNasc DATETIME NOT NULL,
	NumeroCPF NUMERIC(11,0) NOT NULL
)

-- Criação do índice sobre a coluna NumeroCPF
CREATE INDEX IX_NumeroCPF ON Clientes(NumeroCPF)
-- Index Seek + Key Lookup
SELECT *
FROM Clientes
WHERE NumeroCPF = 520725

-- Fake Index Seek
SELECT *
FROM Clientes
-- Key Lookup "Mascarado"
WHERE Codigo IN (
	SELECT Codigo
	FROM Clientes
	-- Utilização do Index Seek
	WHERE NumeroCPF = 520725
)

Abaixo a semelhança entre “Fake” Index Seek e Key Lookup.

Fake Index Seek vs Key Lookup

“Fake” Index Seek é uma técnica que complica cenários preocupados em performance, pois é difícil de ser identificada por mascarar o Key Lookup, então evite utilizá-la!!!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s