SQL 优化

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

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这两个字段建成组合索引

谁在前谁在后我也不清楚,试一试。。

SQL 优化

相关文章:

你感兴趣的文章:

标签云: