MST

星途 面试题库

面试题:MySQL查询性能优化之中等难度:索引使用场景分析

假设有一个电商订单表orders,包含字段order_id(订单ID,主键), user_id(用户ID), order_amount(订单金额), order_date(订单日期)。现在要查询用户ID为123,且订单金额大于1000,订单日期在近一个月内的订单信息。请写出SQL查询语句,并分析如何添加索引以优化查询性能。
12.1万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

SQL查询语句

SELECT order_id, user_id, order_amount, order_date
FROM orders
WHERE user_id = 123
  AND order_amount > 1000
  AND order_date >= CURDATE() - INTERVAL 1 MONTH;

索引优化分析

  1. 复合索引:为 (user_id, order_amount, order_date) 创建复合索引。在MySQL等数据库中,复合索引遵循最左前缀原则,这样能有效利用索引加速查询。因为查询条件中首先过滤 user_id,接着是 order_amount,最后是 order_date,复合索引顺序与查询条件顺序匹配,可以显著提高查询性能。
CREATE INDEX idx_user_amount_date ON orders (user_id, order_amount, order_date);
  1. 覆盖索引:上述复合索引还具备覆盖索引的特性,查询所需的所有字段 order_iduser_idorder_amountorder_date 都包含在索引中,数据库在查询时无需回表操作,直接从索引中获取数据,进一步提升查询效率。