sql语句:
SELECT
o.order_id,
SUM(o.discountAmount) AS discountAmount,
s.store_name,
o.create_time AS create_time,
o.cashPay AS cashAmount,
o.cardPay AS cardAmount,
m. NAME AS realname,
o.sn,
SUM(o.order_amount) AS order_amount,
o.aliPay AS aliPay,
o.wechatPay AS wechatPay,
o.payeasePay AS payeasePay
FROM
es_daycount_order o
LEFT JOIN es_daycount_order_items i ON i.order_id = o.order_id
LEFT JOIN es_goods AS g ON i.goods_id = g.goods_id
LEFT JOIN es_member AS m ON o.operator_id = m.member_id
LEFT JOIN es_store AS s ON m.store_id = s.store_id
WHERE
o.store_id IS NOT NULL
AND o.store_id IN (190, 192)
AND o.create_time > 1483200000
AND o.create_time < 1513958399
AND (
o.pay_status = 2
OR o.pay_status = 3
)
AND o.sn NOT LIKE '%SO10%'
AND o.sn NOT LIKE '%SO20%'
GROUP BY
i.order_id
ORDER BY
create_time DESC;explain结果
现在查询时间是8秒左右。请问怎么优化

解决方案 »

  1.   

    我又来瞎说了,你这种语句要看什么场景了:1. 如果是高并发,高访问量的互联网应用,写这样的SQL,就该好好检讨一下了,2. 如果是报表的话,8秒的时间,是能够接受的,说了这么多,我给点建议吧:1. 如果是互联网应用,
       
       第一:通过执行计划,算好区分度来添加合适的索引。
      
      第二: 把应用服务化吧,给到数据库中的都是一些简单的查询,(这也算是业务上的SQL优化了)2. 如果是报表的话,可以放入大数据中计算,如果没有大数据组呢,也没关系,至少放在丛库(报表库)吧,别把主库压垮了,思考:  想想还有多少这样的SQL,也像上面的步骤解决下吧。最后: 个人微信公众号《andyqian》 更新了不少MySQL相关的文章,希望对你有所帮助!