- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Mysql-报表查询优化提升10倍-剖析
Mysql 报表查询分享(提升10倍)
2015年5月14日
技术部-陈远
优化前需要330秒,优化后只需要25秒
优化前:
优化前需要330秒,优化后只需要25秒
优化后:
菜品销售汇总查询优化
由于这个查询非常的大,实际上是两个查询union,两个查询相似,实际我们分析的时候只需要抽取其中一个子查询即可:
SELECT DishId,BigTypeName,SmallTypeName,DishSerial,DishName,DishPortionsName,
DishPrice,SUM(SalesNum) AS SalesNum,SUM(DishSalesAmount+CookingPrice) AS SalesAmount,
SUM(CookingPrice) AS CookingPrice,
SUM(DiscountAmount) AS DiscountAmount,DishPortionsId,
SUM(SingleCount) AS SingleCount,
SUM(packageCount) AS packageCount
FROM (
SELECT * FROM (
SELECT a.`dish_id` AS DishId,d.`dish_type_name` AS BigTypeName,c.`dish_type_name` AS SmallTypeName, a.dish_serial AS DishSerial,CASE WHEN b.is_temporary =1 THEN CONCAT((临),a.dish_name) ELSE a.dish_name END AS DishName,f.`dish_portions_name` AS DishPortionsName,
a.`dish_price` AS DishPrice,(a.`dish_num`-a.dish_return_count) AS SalesNum,(IF(a.is_free_dish=1,0,a.dish_price) * (a.`dish_num`-a.dish_return_count)) AS DishSalesAmount,IF(a.is_free_dish=1,0,a.`actual_cooking_price`) AS CookingPrice,
(IF(a.is_free_dish=1,0,((a.dish_price) * (a.`dish_num`-a.dish_return_count) + a.`actual_cooking_price`)*a.discount/100)) AS DiscountAmount,a.dish_portions_id AS DishPortionsId,
(CASE WHEN a.is_package_dish=0 THEN a.`dish_num`-a.dish_return_count ELSE 0 END ) AS SingleCount,
(CASE WHEN a.is_package_dish=1 THEN a.`dish_num`-a.dish_return_count ELSE 0 END ) AS packageCount
FROM order_dish a
JOIN `dish` b ON b.`dish_id` = a.`dish_id`
JOIN `dish_type` c ON c.`dish_type_id` = b.`dish_type_id`
JOIN `dish_type` d ON d.`dish_type_id` = c.`parent_id`
JOIN `dish_portions` f ON f.`dish_portions_i
文档评论(0)