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ı?
Bu sorgu, geçersiz bu açıklama bir göz: http://stackoverflow.com/a/33221376/447489 – fancyPants
Ben senin açıklama o alamadım nasıl sorgu geçersiz mi? lütfen burada açıklayabilir misiniz? –
"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