如何在mysql中优化查询,同时使用;分组方式;条款

如何在mysql中优化查询,同时使用;分组方式;条款,mysql,Mysql,我正在使用以下查询,如果按“主管”分组,则大约需要52秒,否则将在2或3秒内完成: 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

我正在使用以下查询,如果按“主管”分组,则大约需要52秒,否则将在2或3秒内完成:

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

有没有关于如何优化此功能以减少时间量的建议?

不要在where条件下使用date函数,因为您无法从潜在的索引帮助中获益。而不是条件
年份(销售日期)=2015
使用条件:

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

我换了,但运气不好。仍然需要52秒以上的时间。如果我使用->group by o.sale\n这个查询是无效的,看看这个解释:我没有从你的解释中了解到查询是如何无效的?您能在这里解释一下吗?您可以按
主管
分组,但选择
sale\u on
。不匹配。停止阅读您的查询,但是您的子查询看起来也很奇怪。这些是相关子查询,对结果中的每一行执行。难怪你的查询速度慢。使用联接重写它,添加一个
explain select…
输出,显示
create table
语句,等等,如果您想优化它的话。我真想知道你是怎么在这个问题上获得5票赞成票的。