码迷,mamicode.com
首页 > 数据库 > 详细

mysql查询语句优化

时间:2014-12-05 18:56:00      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   使用   sp   for   

用explain优化了一个营业日汇总报表的查询。将一处type为all的查询改为range。

sql是一个报表使用:

EXPLAIN SELECT DATE_FORMAT(t1.business_date,%Y-%m-%d) AS business_date, IF(t3.people_num>0, (t1.need_pay_amount/t3.people_num),0) AS avg_people_money,..
FROM  
(
SELECT (SUM(timer_charge) + SUM(time_out_money)) AS timer_charge, 0.00 AS avg_people_money, ..
FROM consumption_history c
WHERE c.`status_code` = 1 AND c.`business_date`>=2014-12-04 AND c.`business_date`<=2014-12-04
GROUP BY c.`business_date`
) t1
LEFT JOIN 
(
SELECT GROUP_CONCAT(CONCAT(p.payment_pattern_name, =, h.payment_money)) AS payment_money_info,SUM(IF(p.payment_property=1,h.payment_money,0)) AS actually_pay_money,..
FROM consumption_history c
INNER JOIN consumption_payment_history h ON  h.consumption_id=c.`consumption_id`
INNER JOIN payment_pattern p ON h.`payment_type_id`=p.`payment_pattern_id`
WHERE c.`status_code` = 1  AND c.`business_date`>=2014-12-04 AND c.`business_date`<=2014-12-04
GROUP BY c.`business_date`
) t2 ON t1.business_date = t2.business_date 
LEFT JOIN 
(
SELECT business_date,SUM(people_num) AS people_num, SUM(order_amount) AS dish_sale_amount 
FROM dining_order_history c
WHERE  c.`status_code` = 1  AND c.`business_date`>=2014-12-04 AND c.`business_date`<=2014-12-04
GROUP BY c.`business_date`
) t3 ON t1.business_date=t3.business_date
ORDER BY t1.`business_date`

 

bubuko.com,布布扣

可以看到explain的结果,这里重点说明下几个列

bubuko.com,布布扣

对type查询方式做下简单说明

bubuko.com,布布扣

在一个consumption_history达到几万条(数据量具体多少forget了)的情况下,性能优化相当明显,从30秒连接超时,到1秒出结果。

看来上述sql是优化的比较到位了。

mysql查询语句优化

标签:style   blog   http   io   ar   color   使用   sp   for   

原文地址:http://www.cnblogs.com/zzq417/p/Mysql_Optimize_Explain.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!