Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

[VAZA]

Query - idéias para melhorar performance

Recommended Posts

Pessoal, eu tenho a seguinte query:

 

SELECT COUNT(DISTINCT(i.chassi_abreviado)) FROM vw_ve_itenscoleta3 i

WHERE i.idcliente = 147 AND i.status_coleta = 'PROCESSADA'

AND i.idtipo_operacao = 11

AND i.chassi_abreviado IN

(SELECT i2.chassi_abreviado FROM vw_ve_itenscoleta3 i2

WHERE i2.idcliente = 147 AND i2.status_coleta = 'PROCESSADA' AND i2.idtipo_operacao = 13)

AND i.chassi_abreviado IN

(SELECT i3.chassi_abreviado FROM vw_ve_itenscoleta3 i3

WHERE i3.idcliente = 147 AND i3.status_coleta = 'PROCESSADA' AND i3.idtipo_operacao = 14)

 

 

Eu preciso selecionar apenas os registros onde o chassi se encontra em tipo_operacao = 11 mas também foram achados em idtipo_operacao = 13 e 14.

Eu não posso apenas fazer isso: AND i2.idtipo_operacao IN (13,14), pq se eu fizer desta forma, ele pode ou não estar em 13 e 14, só que eu quero que eles estejam obrigatoriamente em 13 e em 14.

Minha duvida é: Com essa query, eu percorro minha tabela 3x. Existe alguma forma de que eu possua o mesmo resultado mas que eu faça o mysql percorrer a tabela no maximo 2 vezes?

Estou querendo isso, pq dessa forma a minha query fica muito pesada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT COUNT(DISTINCT(i.chassi_abreviado)) FROM vw_ve_itenscoleta3 i
WHERE i.idcliente = 147 AND i.status_coleta = 'PROCESSADA'
AND i.idtipo_operacao = 11
AND i.chassi_abreviado IN
(SELECT i2.chassi_abreviado FROM vw_ve_itenscoleta3 i2
WHERE i2.idcliente = 147 AND i2.status_coleta = 'PROCESSADA' AND i2.idtipo_operacao in (13,14))

 

miora um pouco...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, essa foi a primeira coisa que eu fiz, só que ocorre o seguinte:

o chassi pode estar em idtipo_operacao 13 ou/e em idtipo_operacao 14. Eu quero que o mesmo chassi esteja obrigatoriamente em 13 e em 14.

Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT COUNT(DISTINCT(i.chassi_abreviado)) FROM vw_ve_itenscoleta3 i
WHERE i.idcliente = 147 AND i.status_coleta = 'PROCESSADA'
AND i.idtipo_operacao = 11
AND exists
(SELECT i2.chassi_abreviado 
FROM vw_ve_itenscoleta3 i2
WHERE i2.idcliente = 147 
AND i2.status_coleta = 'PROCESSADA' 
AND i2.idtipo_operacao in (13,14)
group by i2.chassi_abreviado
having count(*) > 1)

 

babá se houver dois 13 ou dois 14.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, pode haver mais de um 13 e mais de um 14 :S

Também pensei nisso :(

 

eu tentei a seguinte query abaixo:

SELECT * FROM vw_ve_itenscoleta2

WHERE chassi_abreviado = '001156'

AND idtipo_operacao = ALL (SELECT idtipo_operacao FROM ve_tipo_operacoes WHERE idtipo_operacao IN (11, 13, 14))

 

Mas ta me retornando nulo e eu sei que esse chassi_abreviado 001156 existe para os 3 idtipo_operacao

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT COUNT(DISTINCT(i.chassi_abreviado)) FROM vw_ve_itenscoleta3 i
WHERE i.idcliente = 147 AND i.status_coleta = 'PROCESSADA'
AND i.idtipo_operacao = 11
AND 2 = (SELECT count(distinct i2.chassi_abreviado)  
        FROM vw_ve_itenscoleta3 i2
        WHERE i2.idcliente = 147 
        AND i2.status_coleta = 'PROCESSADA' 
        AND i2.idtipo_operacao in (13,14)
       group by i2.chassi_abreviado
       having count(*) > 1)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.