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;
索引优化分析
- 复合索引:为
(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);
- 覆盖索引:上述复合索引还具备覆盖索引的特性,查询所需的所有字段
order_id
、user_id
、order_amount
、order_date
都包含在索引中,数据库在查询时无需回表操作,直接从索引中获取数据,进一步提升查询效率。