Tenho uma query que executa uma determinada subquery várias vezes.
Cada resultado dessa subquery passa por um CONCAT específico. (poderia ser qualquer outra função, não importa)
Depois todos os resultados dos CONCAT são unido com UNION, gerando o resultado final.
Vejam:
Select a, b, c, d from(
(
Select a, b, c, CONCAT(d, e) as d from (
Select * from tabela where data BETWEEN '01/12/2000' and '05/03/2013'
)
)
union
(
Select a, b, c, CONCAT(e, f) as d from (
Select * from tabela where data BETWEEN '01/12/2000' and '05/03/2013'
)
)
union
(
Select a, b, c, CONCAT(f, g) as d from (
Select * from tabela where data BETWEEN '01/12/2000' and '05/03/2013'
)
)
union
(
Select a, b, c, CONCAT(g, h) as d from (
Select * from tabela where data BETWEEN '01/12/2000' and '05/03/2013'
)
)
union
(
Select a, b, c, CONCAT(h, i) as d from (
Select * from tabela where data BETWEEN '01/12/2000' and '05/03/2013'
)
)
... mais alguns unions ...
)
Só que ela está rodando N vezes (1 vez para cada caso do CONCAT). Isto faz com que a query completa demore muito!
O que pode ser feito nesse caso para que esta subquery não rode tantas vezes desnecessariamente?
Algo que faça ela rodar somente uma vez e seu result seja reaproveitado nas outras querys de fora?
Já tentei colocar essa subquery em uma view e colocar a chamada da view no lugar da subquery. Mas isso não fez diferença alguma no tempo de execução já que a view rodaria a cada chamada do mesmo jeito.
Me dêm uma força.
Abraços!