- 创建合适索引:
- 应该创建一个复合索引,包含
customer_id
、order_date
和total_amount
字段。因为在分组和排序操作中,这些字段都起到关键作用。复合索引的顺序应该是(customer_id, order_date DESC, total_amount ASC)
。
- 优化原理:
- 数据库的索引结构(如B - Tree索引)可以加快数据的查找速度。对于分组操作,
customer_id
在索引的最前面,数据库可以快速定位到每个customer_id
的分组数据。对于每个分组内的排序,order_date DESC
和total_amount ASC
的顺序与排序要求一致,索引可以直接按照这个顺序读取数据,减少了数据读取后的重新排序操作,从而大大提高查询效率。
- 创建索引SQL语句:
CREATE INDEX idx_customer_order ON orders (customer_id, order_date DESC, total_amount ASC);
- 查询SQL语句:
SELECT order_id, customer_id, order_date, total_amount
FROM orders
GROUP BY customer_id
ORDER BY customer_id, order_date DESC, total_amount ASC;