2013-05-31 12 views
7

Sto ottimizzando una query che implica uno UNION ALL di due query. Entrambe le query sono state più che ottimizzate ed eseguite a meno di un secondo separatamente. Tuttavia, quando eseguo l'unione di entrambi, sono necessari circa 30 secondi per calcolare tutto.Come migliorare le prestazioni di MYSQL su UNION ALL?

Non voglio perdere tempo con la query specifica, dal momento che sono ottimizzati mentre ottengono, così chiamiamoli Optimized_Query_1 e Optimized_Query_2

Numero di righe da Optimized_Query_1 è circa 100K

Numero di righe da Optimized_Query_2 è approssimativamente 200K

SELECT * FROM (
    Optimized_Query_1 
UNION ALL 
    Optimized_Query_2 
) U 
ORDER BY START_TIME ASC 

io richiedo per teh resu È necessario essere in ordine, ma trovo che con o senza l'ordine BY alla fine la query impiega tanto tempo, quindi non dovrebbe fare alcuna differenza.

Apparentemente UNION ALL crea una tabella temporanea in memoria, da dove vengono quindi forniti i risultati finali, c'è un modo per aggirare questo problema?

Grazie

risposta

2

Non si può ottimizzare UNION ALL. Semplicemente impila i due set di risultati uno sopra l'altro. Rispetto a UNION dove è necessario un ulteriore passaggio per rimuovere i duplicati, UNION ALL è un raggruppamento diretto dei due set di risultati. È probabile che il ORDER BY impieghi più tempo.

È possibile provare a creare uno VIEW di questa query.

+0

Se rimuovo l'ORDINE DA il tempo totale per calcolare la query richiede tanto tempo. In che modo creare un aiuto VIEW? – jonasMcFerreira

+0

@jonasMcFerreira Dai un'occhiata a [questa discussione] (http://dev.mysql.com/doc/refman/5.5/en/create-view.html#c9063) – Kermit

Problemi correlati