Array
(
)

Consulta extremamente lenta

Pjava
   - 16 abr 2012

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

Marco Pinheiro
   - 16 abr 2012

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

Emerson
   - 21 abr 2012

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

#Código

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