Consulta extremamente lenta

16/04/2012

0

Preciso de uma consulta, que faça exatamente o que a minha query faz. Da forma que está, tá demorando uma eternidade e olha que eu só tenho uns 4.000 registros. Alguém pode me dar uma luz? Preciso que me retorne na consulta, informações para cada status. Já passam dos 18 min e ainda não retornou nada.

select analise.dt_cp1,aprovada.dt_cp1, reprovada.dt_cp1,

count(*) as Total from

dbo.HISTORICO hist,

(select dt_cp1 from HISTORICO where status = ‘EM ANALISE’)as analise,

(select dt_cp1 from HISTORICO where status = APROVADA)as aprovada,

(select dt_cp1 from HISTORICO where status = ‘REPROVADA’)as reprovada



where hist.dt_cp1 between 01/01/2010 and 5/01/2010

group by analise.dt-_cp1,aprovada.dt_cp1, reprovada.dt_cp1

Pjava

Pjava

Responder

Posts

16/04/2012

Marco Pinheiro

E se vc escrevê-la fazendo os relacionamentos?

select analise.dt_cp1,aprovada.dt_cp1, reprovada.dt_cp1,

count(*) as Total from

dbo.HISTORICO hist,

(select dt_cp1 /*colocar as colunas da PK*/ from HISTORICO where status = ‘EM ANALISE’)as analise,

(select dt_cp1 /*colocar as colunas da PK*/ from HISTORICO where status = APROVADA)as aprovada,

(select dt_cp1 /*colocar as colunas da PK*/ from HISTORICO where status = ‘REPROVADA’)as reprovada



where hist.dt_cp1 between 01/01/2010 and 5/01/2010
--and relacionamentos de hist com analise, analise com aprovada, aprovada com reprovada. Pois da forma que está o SQL está fazendo um produto cartesiano. Então ele vai varrer cada registro 4000 vezes, mais o numero de tabelas. Seria uma conta do tipo 4000*4000*4000*4000

group by analise.dt-_cp1,aprovada.dt_cp1, reprovada.dt_cp1
Responder

21/04/2012

Emerson Nascimento

faça tudo com uma única consulta à tabela, sem qualquer sub-consulta.

select 
 sum(case when status = ‘EM ANALISE’ then 1 else 0 end) as analise,
 sum(case when status = ‘APROVADA’ then 1 else 0 end) as aprovada,
 sum(case when status = ‘REPROVADA’ then 1 else 0 end) as reprovada,
 count(*) as total
from
 HISTORICO
where
 dt_cp1 between ‘01/01/2010’ and ‘5/01/2010’


para tornar a consulta mais rápida, crie um índice pelos campos dt_cp1 e status

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar