• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SQL 优化

mysql 搞代码 7年前 (2018-06-02) 72次浏览 已收录 0个评论

SQL 优化求助
逻辑场景
商品销售统计分析
需求 
统计在 某一时间段内 以各商品分类下销售的商品为纬度 产生的购买记录 我的sql是这样子的
商品表 zhaipin_goods
商品分类表 zhaipin_category
订单表 zhaipin_order_info
订单商品表 zhaipin_order_goods
我写的SQL

SQL code

  SELECT  C.cat_name AS cat_name, SUM(OG.goods_number) AS total_sell_num, SUM(OI.order_amount) AS total_sell_amount  FROM `zhaipin_category` AS C  RIGHT JOIN `zhaipin_goods` AS G ON C.cat_id = G.cat_id  RIGHT JOIN `zhaipin_order_goods` AS OG ON OG.goods_id=G.goods_id  LEFT JOIN `zhaipin_order_info` AS OI ON OI.order_id=OG.order_id  AND OI.pay_status = 2  AND shipping_time >= ('1325318400'-8*60*60)  AND shipping_time <= ('1338242092'-8*60*60) GROUP BY C.cat_id  

欢迎大家阅读《SQL 优化》,跪求各位点评,by 搞代码

EXPLAIN 的结果

在线求助 数量级在100W的表

——解决方案——————–
AND OI.pay_status = 2 
AND shipping_time >= (‘1325318400’-8*60*60) 
AND shipping_time <= (‘1338242092’-8*60*60)
这些是过滤条件不是连接条件吧,应该写成
where OI.pay_status = 2 
AND shipping_time >= (‘1325318400’-8*60*60) 
AND shipping_time <= (‘1338242092’-8*60*60)
我很奇怪shipping_time 是OI表的字段,但是你这么些为什么没有报错呢?
OG表的连接字段是OG.goods_id和OG.order_id这里也许要把两个字段建成组合索引(猜的。。。),可以试试
还有都写成左连接好看些。
——解决方案——————–
表的优化和数据库机器的内存也是有关系的。
——解决方案——————–
zhaipin_order_goods表里把
goods_id和order_id这两个字段建成组合索引
谁在前谁在后我也不清楚,试一试。。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SQL 优化
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址