優化mysql 商品銷售情況統計查詢慢的問題
給定的sql 查詢用于統計指定時間段內商品銷售情況,但當統計范圍較寬(例如昨天、本周等)時,查詢速度非常慢。優化建議如下:
-
去除不必要的索引:
- goods 表的create_time 索引
- orders 表的create_time 索引
-
調整orders 表的索引:
- 將(goods_id) 索引修改為(create_time, goods_id , amount, status)
-
重寫查詢:
SELECT g.title, COUNT(*) AS total, COALESCE(SUM(o.amount), 0) AS total_amount, COALESCE(SUM(IF(o.status = 1, o.amount, 0)), 0) AS success_amount, COALESCE(SUM(IF(o.status = 2, o.amount, 0)), 0) AS failed_amount, COALESCE(SUM(o.status = 1), 0) AS success_total, COALESCE(SUM(o.status = 2), 0) AS failed_total FROM orders AS o JOIN goods AS g ON g.id = o.goods_id WHERE o.create_time BETWEEN 'xxx' AND 'yyy' GROUP BY o.id ORDER BY total DESC LIMIT 10
-
考慮使用sqlite:
- 對于數據量級較小的查詢(幾百萬以內),sqlite 可能提供更佳的性能,減少數據同步的麻煩。
經過這些優化措施,應該可以顯著提高查詢速度,滿足寬范圍時間段統計的需求。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END