MST
星途 面试题库

面试题:MySQL中如何设计复合索引以提高查询性能

假设有一个订单表orders,包含字段order_id(订单ID)、customer_id(客户ID)、order_date(订单日期)和order_amount(订单金额)。现在经常需要执行根据customer_id和order_date范围查询订单金额的操作,应该如何设计复合索引来优化此查询?请阐述设计思路及原因。
33.5万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试
  1. 设计复合索引:应设计复合索引 (customer_id, order_date, order_amount)
  2. 设计思路及原因
    • 最左前缀原则:在查询中,经常根据 customer_idorder_date 范围查询,将 customer_id 放在索引最左边,符合最左前缀原则,这样能快速定位到特定客户。
    • 范围查询order_date 放在第二位,因为它是范围查询字段。在 customer_id 确定的基础上,对 order_date 进行范围扫描可以快速筛选出符合日期范围的记录。
    • 覆盖索引:把 order_amount 也包含在索引中,形成覆盖索引。这样查询时直接从索引中就能获取到 order_amount 字段的值,无需回表操作,大大提高查询效率。