2015-10-20 14 views
5

Ben 'danışman' göre gruplandırılmış eğer yaklaşık 52 saniye alıyor aşağıdaki sorguyu kullanıyorum aksi takdirde 2 veya 3 saniye içinde tamamlar:"Group by" deyimini kullanırken mysql'deki bir sorgu nasıl en iyi duruma getirilir?

SELECT SQL_CALC_FOUND_ROWS MONTHNAME(o.sale_on) AS DATE, 
     SUM(od.current_status_id=1) AS sales, 
     IFNULL(SUM(CASE WHEN od.current_status_id=2 
        OR od.current_status_id=3 THEN 
        (SELECT SUM(amount) 
        FROM order_refund_chargeback 
        WHERE order_detail_id = od.order_detail_id) END),0) AS total_outflow, 
     IFNULL(
       (SELECT GROUP_CONCAT(CONCAT(user_first_name," ",user_last_name)) 
       FROM user_detail 
       WHERE user_id IN 
        (SELECT manager_id 
        FROM `user_org_map` 
        WHERE user_id = o.assigned_to)),"") AS supervisor, 
     IFNULL(mco.country_name,"") AS country 
FROM orders o 
RIGHT JOIN order_detail od 
    USING (order_id) 
LEFT JOIN user_detail ud 
    ON ud.user_id = o.assigned_to 
LEFT JOIN customer_detail cd 
    ON cd.customer_id= o.customer_id 
LEFT JOIN master_product mp 
    ON mp.product_id = od.product_id 
LEFT JOIN master_campaign mc 
    ON mc.campaign_id = cd.campaign_id 
LEFT JOIN master_country mco 
    ON mco.country_id = cd.country 
WHERE 1=1 
AND YEAR(o.sale_on) =2015 
GROUP BY supervisor 
ORDER BY supervisor ASC 
LIMIT 0, 12 

zaman miktarı can böylece bu duruma konusunda herhangi bir öneri azaltılmış mı?

+0

Bu sorgu, geçersiz bu açıklama bir göz: http://stackoverflow.com/a/33221376/447489 – fancyPants

+0

Ben senin açıklama o alamadım nasıl sorgu geçersiz mi? lütfen burada açıklayabilir misiniz? –

+0

"Supervisor" ile gruplandırıyorsunuz, ancak "sale_on" öğesini seçiyorsunuz. Eşleşmiyor. Sorgunuzu orada okumayı durdurdum, ancak alt sorgunuz da çok tuhaf görünüyor. Bunlar sonuçtaki her satır için yürütülen bağımlı alt sorgulardır. Sorgunun yavaş olduğunu merak etme. Birleştir ile birleştirin, bir "select select ..." çıktısı ekleyin, 'create table' ifadelerinizi gösterin ve bunu optimize etmek istiyorsanız bunu yapın. Aslında bu soruda 5 tane nasıl oy aldığınızı merak ediyorum. – fancyPants

cevap

0

Potansiyel dizin yardımından yararlanamadığınız için, tarih özelliğini bu koşulda kullanmayın. Bunun yerine koşul YEAR(o.sale_on) =2015 kullanım durumunun:

o.sale_on BETWEEN '2015-01-01' AND '2015-12-31'. 
+0

Değiştirdim ama şans yok. Hala 52+ saniye alıyor. Kullanırsam iyi çalışır -> group by o.sale_on –

İlgili konular