2013-05-31 12 views
7

Ich optimiere eine Abfrage, die eine UNION ALL von zwei Abfragen enthält. Beide Abfragen wurden mehr als optimiert und laufen mit weniger als einer Sekunde getrennt. Wenn ich jedoch die Vereinigung von beiden führe, dauert es ungefähr 30 Sekunden, um alles zu berechnen.Wie verbessert man die MySQL-Performance auf UNION ALL?

Ich will nicht, dass Sie mit der spezifischen Abfrage stören, da sie optimiert sind, wie sie bekommen, also nennen wir sie Optimized_Query_1 und Optimized_Query_2

Anzahl der Zeilen aus Optimized_Query_1 ist etwa 100K

Anzahl der von Optimized_Query_2 Reihen ist etwa 200K

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

ich für teh resu benötigen Es ist in Ordnung, aber ich finde, dass mit oder ohne die ORDER BY am Ende die Abfrage so viel Zeit braucht, so sollte keinen Unterschied machen.

Offenbar erstellt die UNION ALL eine temporäre Tabelle im Speicher, aus der dann die Endergebnisse hervorgehen, gibt es eine Möglichkeit, dies zu umgehen?

Dank

Antwort

2

Sie UNION ALL nicht optimieren können. Es stapelt einfach die beiden Ergebnismengen übereinander. Im Vergleich zu UNION, wo ein zusätzlicher Schritt erforderlich ist, um Duplikate zu entfernen, ist UNION ALL eine gerade Stapelung der beiden Ergebnissätze. Die ORDER BY nimmt wahrscheinlich zusätzliche Zeit in Anspruch.

Sie können versuchen, ein VIEW aus dieser Abfrage zu erstellen.

+0

Wenn ich die ORDER BY die Gesamtzeit entfernen, um die Abfrage zu berechnen, dauert genauso viel Zeit. Wie würde eine VIEW-Hilfe erstellt? – jonasMcFerreira

+0

@jonasMcFerreira Werfen Sie einen Blick auf [diese Diskussion] (http://dev.mysql.com/doc/refman/5.5/en/create-view.html#c9063) – Kermit

Verwandte Themen