Ir para conteúdo

POWERED BY:

Arquivado

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

Shakapp

Como executar subquery primeiro

Recommended Posts

Amigos tenho o seguinte sql

 

SELECT ROUND(SUM(qtd_trabalho)/60,2) 
FROM ONEPAGER_OP_BCK
WHERE SUBSTR(cod_atividade,1,3) IN (SELECT cod_especialidade
			    FROM recurso_manutencao r
			    WHERE r.cod_agrupado IN ('MEC','ELE','INS/AUT'))
AND cod_filial = 'AG'
AND cod_subarea IN (SELECT SUBSTR(cod_area_utilidade,1,5)
	    FROM area_utilidade a
	    WHERE cod_area_one_pager = 'L502')
AND dat_inicio_operacao BETWEEN'2007-01-01' AND '2999-01-01'

 

Este SQL pelo Explain demonstra que foi usado 19mil linhas, se eu tirar a ultima subquery e colocar o valor que ela retorna direto, o Explain cai para 2mil linhas.

 

SELECT ROUND(SUM(qtd_trabalho)/60,2) 
FROM ONEPAGER_OP_BCK
WHERE SUBSTR(cod_atividade,1,3) IN (SELECT cod_especialidade
			    FROM recurso_manutencao r
			    WHERE r.cod_agrupado IN ('MEC','ELE','INS/AUT')) 
AND cod_filial = 'AG' 
AND cod_subarea IN ('05020') 
AND dat_inicio_operacao BETWEEN'2007-01-01' AND '2999-01-01'

 

Pesquisando a respeito, notei que isso ocorre pois, por padrão o Mysql executa de fora para dentro, assim executando o sql externo, com as 20mil linhas e depois selecionado as condições do subselect, gostaria de saber se tem alguma forma de forçar o MySQL executar o subselect primeiro e usar o resultado para o select de fora, assim usando apenas 2mil linhas.

 

Existe uma forma de forçar o Mysql executar de dentro para fora, e não de fora para dentro?

 

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente

 

SELECT ROUND(SUM(qtd_trabalho)/60,2) 
FROM ONEPAGER_OP_BCK,rea_utilidade a,recurso_manutencao r
WHERE SUBSTR(cod_atividade,1,3) = r.cod_especialidade
and r.cod_agrupado IN ('MEC','ELE','INS/AUT'))
AND cod_filial = 'AG'
AND cod_subarea = SUBSTR(cod_area_utilidade,1,5)
and cod_area_one_pager = 'L502')
AND dat_inicio_operacao BETWEEN'2007-01-01' AND '2999-01-01'

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.