2013-05-31 19 views
7

Jestem optymalizacji kwerendy, która obejmuje UNION ALL dwóch kwerend. Oba zapytania zostały zoptymalizowane i działają z dokładnością do jednej sekundy osobno. Jednak, gdy wykonuję połączenie obu, obliczenie wszystkiego zajmuje około 30 sekund.Jak poprawić wydajność MYSQL na UNION ALL?

I nie przeszkadza Ci konkretnego zapytania, ponieważ są one zoptymalizowane jak oni dostać, więc nazwijmy je Optimized_Query_1 i Optimized_Query_2

Liczba wierszy z Optimized_Query_1 wynosi około 100K

Ilość wiersze z Optimized_Query_2 wynosi około 200K

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

I wymagają dla teh resu Będziemy w porządku, ale stwierdzam, że z ORDER BY lub bez na końcu zapytanie zajmuje tyle czasu, więc nie powinno sprawić żadnej różnicy.

Wygląda na to, że UNION ALL tworzy tymczasowy stół w pamięci, skąd ostateczne wyniki są podawane, czy istnieje sposób obejścia tego?

Dzięki

Odpowiedz

2

Nie można zoptymalizować UNION ALL. Po prostu układa dwa zestawy wyników jeden na drugim. W porównaniu do UNION, gdzie do usunięcia duplikatów wymagany jest dodatkowy krok, UNION ALL jest prostym zestawieniem dwóch zestawów wyników. ORDER BY prawdopodobnie zajmie więcej czasu.

Możesz spróbować utworzyć VIEW z tego zapytania.

+0

Po usunięciu ZAMÓWIENIA przez łączny czas obliczenia zapytania zajmuje tyle samo czasu. W jaki sposób tworzenie pomocy VIEW? – jonasMcFerreira

+0

@jonasMcFerreira Spójrz na [tę dyskusję] (http://dev.mysql.com/doc/refman/5.5/en/create-view.html#c9063) – Kermit

Powiązane problemy