Sto usando la seguente query che sta prendendo circa 52 secondi se raggruppati per 'supervisore' altrimenti si completa entro 2 o 3 secondi:Come ottimizzare una query in mysql mentre si utilizza la clausola "group by"?
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
Qualsiasi suggerimento su come ottimizzare questo modo che la quantità di tempo può essere ridotto?
Questa query non è valido, dare un'occhiata a questa spiegazione: http://stackoverflow.com/a/33221376/447489 – fancyPants
Non ho ottenuto che dal tua spiegazione come il la query non è valida? puoi spiegare qui? –
Si raggruppa per 'supervisor' ma si seleziona' sale_on'. Non corrisponde. Smesso di leggere la tua query proprio lì, ma anche le subquery sembrano molto strane. Quelle sono sottoquery dipendenti, eseguite per ogni riga del risultato. Nessuna meraviglia che la tua richiesta sia lenta. Riscritelo con i join, aggiungete un output 'explain select ...', mostrate le istruzioni 'create table' e così via se volete ottimizzarlo. Mi chiedo davvero come hai ottenuto 5 voti positivi su questa domanda. – fancyPants