MST

星途 面试题库

面试题:MySQL多字段索引在复杂排序优化中的应用

在一个`orders`表中,有`order_id`、`customer_id`、`order_date`、`total_amount`字段。现在要实现按`customer_id`分组,并在每个分组内按`order_date`降序、`total_amount`升序排序。请说明怎样创建合适的索引来优化这个复杂排序操作,以及优化的原理是什么,最后给出创建索引和查询的SQL语句。
34.7万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

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