如何優化 mysql 商品銷售情況統計查詢
該查詢旨在統計商品銷售情況,涉及商品和訂單表。然而,當針對特定時間段進行統計時,查詢速度變得非常緩慢。以下是一些優化建議:
- 取消 create_time 索引
這兩個表的 create_time 索引可能導致索引膨脹,從而降低查詢性能。可以考慮移除這些索引。 - 修改 orders 表 goods_id 索引
orders 表中的 goods_id 索引可以修改為復合索引 (create_time, goods_id, amount, status)。這將提高在指定時間范圍內按商品 id、金額和狀態分組的查詢效率。 -
優化 sql 查詢
以下優化后的 sql 查詢: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
其中 xxx 和 yyy 分別代表查詢時間段的開始和結束時間。
此外,對于小數據量(幾十萬條記錄),考慮使用 sqlite 可能是另一種更有效的選擇。它以其快速查詢速度而聞名,無需使用復雜的優化技術。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END