Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
381
Assunto : SQL Server
Titulo: Mais utilidades para o UNION - Melhorando a performance

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



Observe o seguinte select, que pode ser aplicado no banco northwind :

select orderid from orders where customerid='VICTE' or EmployeeID=5

Parece um select simples, mas o problema nele é a utilização do OR com dois campos diferentes.

Se analisar o plano de execução desse select verá que é mostrado que será feito um clustered index scan, o que gera perda de performance no processamento desse select.

A tabela orders possui um índice para customerid e outro índice para employeeid, mas como os dois foram utilizados com OR na clausula where do select, o SQL Server não vê alternativas a não ser fazer um scan no índice clustered.

Se pedirmos auxilio ao Index Tunning Wizard ele nos recomendará a criação de um índice covering, ou seja, um índice composto de customerID e EmployeeID.

Devido ao fato do índice ser covering o SQL passa a utiliza-lo, porque seu tamanho de linha é menor que o tamanho de linha da tabela (último nível do índice clustered), consequentemente havendo melhor performance em seu uso.

Mas você observará que mesmo assim o plano de execução estará indicando o uso de Index Scan, ou seja, todo o índice teve que ser vasculhado para encontrar a informação, isso porque estamos utilizando OR.

Para solucionar este problema podemos separar a query em 2, veja :

select orderid from orders where customerid='VICTE'
union all
select orderid from orders where EmployeeID=5

Desta forma as querys são processadas em separado e para cada uma delas existe um índice que poderá estar sendo utilizado.

E minha máquina, a primeira query mostra como estimated subtree cost 0.0407, enquanto que a segunda mostra 0.0128, ou seja, bem melhor.

Desta forma a query fica bem mais otimizada com o UNION do que com a utilização de OR

Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 2/13/2014 3:35:00 PM
nome: wholesale bags
email: maqecctd@gmail.com
comentário:
Mais utilidades para o UNION - Melhorando a performance - B?falo Inform?tica

 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br