MST
星途 面试题库

面试题:MySQL性能调优之索引策略

假设你有一个包含大量数据的订单表,表结构中有订单ID、客户ID、订单日期、订单金额等字段,经常会按照客户ID和订单日期范围来查询订单金额总和。请阐述如何设计索引以优化这类查询的性能,并解释原因。
30.1万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试
  1. 索引设计
    • 创建复合索引,以客户ID和订单日期作为索引列,即CREATE INDEX idx_customer_date_amount ON orders (customer_id, order_date);
  2. 原因
    • 最左前缀原则:复合索引遵循最左前缀原则。当查询按照客户ID和订单日期范围进行时,数据库可以高效地利用此索引。先根据客户ID快速定位到相关客户的所有订单记录,再在此基础上根据订单日期范围进一步筛选,减少了全表扫描的数据量。
    • 覆盖索引:虽然没有直接包含订单金额字段,但由于在查询订单金额总和时,索引已经覆盖了客户ID和订单日期,在通过索引定位到符合条件的记录后,直接获取订单金额进行求和操作,减少了回表操作(如果索引不覆盖查询字段,可能需要根据索引找到原表记录,这就是回表),从而提高了查询性能。