面试题答案
一键面试索引优化提升查询性能
为提升该查询性能,可创建复合索引:
CREATE INDEX idx_customer_date_amount ON orders (customer_id, order_date, total_amount);
- 复合索引原理:MySQL会按照索引列顺序依次查找,先定位
customer_id
,再在该范围内找order_date
,最后排序total_amount
。
不同索引策略优缺点
- 单个索引:
- 优点:简单易创建。若只按
customer_id
或order_date
单个条件查询,有一定优化效果。 - 缺点:对于当前复合条件查询,无法同时利用多个索引优化。若对每个字段都建单个索引,会增加索引维护成本和存储空间。
- 优点:简单易创建。若只按
- 复合索引:
- 优点:能有效覆盖当前查询,提高查询性能。MySQL可使用索引直接定位数据,减少全表扫描。
- 缺点:索引列顺序很关键。若顺序不合理(如
(order_date, customer_id, total_amount)
),对当前查询优化效果不佳。并且,插入、更新、删除操作时,索引维护成本比单个索引高。
MySQL执行计划反映索引使用合理性的指标
- key:显示MySQL实际使用的索引。若为
NULL
,表示未使用索引。 - key_len:表示使用索引的长度。长度越接近索引定义长度,索引使用越充分。
- ref:显示哪些列或常量被用于查找索引列上的值。若查询条件都被有效利用,可看到对应列或常量。
- rows:估计为找到所需行而要读取的行数。值越小,说明索引使用越有效,查询效率越高。