Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
1182
Assunto : SQL Server
Titulo: Cuidado com a ordem de funções ao usar agregação

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



Escrevi anteriormente sobre como o uso de um Cast para o tipo Date pode ajudar a performance das queries, por facilitar a comparação de datas.

Uma query comum é pegar a maior data de uma tabela, eventualmente para obter o ou os registros que possuem essa data.

Sem o cast para date uma query assim na tabela orders do northwind seria como o seguinte:

select orderid, customerid,orderDate
from orders
where orderdate=(select max(orderdate) from orders)

Em uma situação real essa query irá trazer apenas um registro como resposta pelo fato de quer orderdate também contém a hora.

Se desejassemos obter todas as vendas do mesmo dia, essa query não resolveria exatamente por causa do problema da data e hora.

Podemos resolver isso aplicando um cast sobre o orderdate retornado para a query. Chegamos então ao assunto deste post.

Essa query abaixo seria um erro:

select max(cast(orderdate as date)) from orders

Ao aplicar o cast sobre o campo para depois fazer o max obriga o SQL Server a aplicar o cast em todos os registros para depois calcular o max. A performance ficaria muito ruim.

Basta alterar a ordem das funções e o SQL Server primeiro obterá o max para depois aplicar o cast apenas no resultado do max, permitindo então o uso de indices e tendo uma performance bem melhor. Veja como fica:

select cast(max(orderdate) as Date) from orders

O resultado final fica da seguinte forma:

select orderid, customerid,orderDate
from orders
where orderdate>=(select cast(max(orderdate) as Date) from orders)

Veja mais detalhes em http://cidadaocarioca.blogspot.com.br/2015/03/cuidado-com-ordem-no-uso-de-funcoes-de.html


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
Nenhum comentário foi realizado ainda. Seja o primeiro !
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