2013-05-31 21 views
7

İki sorgudan oluşan bir UNION ALL içeren bir sorguyu en iyi duruma getiriyorum. Her İki Sorgu da optimize edilmekten daha fazlası ve ayrı bir saniyeden daha az bir süredir çalıştı. Bununla birlikte, her ikisini de birleştirdiğimde, her şeyi hesaplamak yaklaşık 30 saniye sürüyor.UNION ALL'da MYSQL performansı nasıl geliştirilir?

onlar olsun onlar optimize edilmiştir beri, özel bir sorgulama ile sizi rahatsız, Öyleyse Optimized_Query_1 gelen satırların Optimized_Query_1 ve Optimized_Query_2

Numara diyoruz izin vermez 100K

sayısı kabaca olduğunu Optimized_Query_2 gelen satırları teh resu olması için gereken ne 200K

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

kabaca Sıralı olmak gerekirse, ama sonunda SİPARİŞ BY ile ya da olmadan sorgunun çok fazla zaman aldığını farketmem.

Görünüşe göre, UNION ALL bellekte geçici bir tablo oluşturur, sonuçların verileceği yerden sonra, bunun üzerinde çalışmanın herhangi bir yolu var mı?

Teşekkür

cevap

2

Sen UNION ALL optimize olamaz. İki sonuç kümesini birbirinin üzerine yerleştirir. Çoğalmaları kaldırmak için fazladan bir adım gereken UNION ile karşılaştırıldığında, UNION ALL iki sonuç kümesinin düz bir şekilde yığılmasıdır. ORDER BY büyük olasılıkla ek zaman alıyor.

Bu sorgudan bir VIEW oluşturmayı deneyebilirsiniz.

+0

Sorguyu hesaplamak için toplam süreyi SIFIRLAYIRIYORUMU kadar zaman alır. VIEW yardımı nasıl oluşturulur? – jonasMcFerreira

+0

@jonasMcFerreira [Bu tartışmaya] bir göz atın (http://dev.mysql.com/doc/refman/5.5/en/create-view.html#c9063) – Kermit