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
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
Curtir tópico
+ 0
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
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.
para tornar a consulta mais rápida, crie um índice pelos campos dt_cp1 e status
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
Clique aqui para fazer login e interagir na Comunidade :)