quarta-feira, 3 de fevereiro de 2010

Select em view indexada não usa índices

Hoje ao otimizar uma query, tive a brilhante idéia de criar uma view indexada. Criei a view com o cuidado de utilizar as tags para evitar os erros de ARITH ABORT, e lá fui eu. Alterei a procedure que antes usava a tabela diretamente e direcionei o select para a view recém-criada. Comentei o cabeçalho da view para analisar o execution plan e para minha surpresa, a query estava usando uma referência direta a tabela, ignorando a view e os índices recém-criados.

Pesquisando na net, encontrei um artigo falando sobre o problema e descobri uma nova query hint: WITH (NOEXPAND)

Basicamente, o query processor estava analisando a view que eu criei e a considerando um view comum e a expandindo, acessando diretamente a tabela. Adicionando o hint NOEXPAND, a expansão da query é evitada e a query é acessada, e um ótimo INDEX SEEK foi utilizado para a query.

Mais um usuário feliz!

Até a próxima!


Nenhum comentário:

Postar um comentário

Leave your comment here!