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