5
私は「上司」でグループ化された場合は約52秒を取っている次のクエリを使用していますそれ以外の場合は2〜3秒以内に完了します。"group by"句を使ってmysqlでクエリを最適化する方法は?
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
時間の量ができるように、これを最適化する方法上の任意の提案減らされる?
このクエリが無効である、この説明を見て:その代わり条件
YEAR(o.sale_on) =2015
使用条件のhttp://stackoverflow.com/a/33221376/447489 – fancyPantsどのように私はあなたの説明からそれを取得できませんでしたクエリが無効ですか?ここで説明していただけますか? –
'supervisor'でグループ化しますが' sale_on'を選択します。それは一致しません。あなたのクエリをすぐに読み込むことを停止しましたが、サブクエリも非常に奇妙に見えます。それらは従属サブクエリであり、結果の各行に対して実行されます。あなたの質問が遅いのは不思議ではありませんジョインで書き直し、 'explain select ...'出力を追加し、 'create table'文を表示します。私は実際にあなたがどのようにこの質問に5 upvotesを持っているのだろうか。 – fancyPants