MST

星途 面试题库

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

在MySQL中,假设我们有一个包含订单信息的表orders,表结构为(id INT PRIMARY KEY AUTO_INCREMENT, order_number VARCHAR(50), customer_id INT, order_date DATE, amount DECIMAL(10, 2)),现在经常需要根据customer_id和order_date查询订单金额amount,应该如何创建索引以提升查询性能?如果索引创建不合理可能会带来什么问题?
46.7万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

创建索引提升查询性能

可以在customer_idorder_date字段上创建联合索引,SQL语句如下:

CREATE INDEX idx_customer_date ON orders (customer_id, order_date);

通过这种方式,MySQL在执行根据customer_idorder_date查询amount的语句时,可以利用该联合索引快速定位到相应的数据行,从而提升查询性能。

索引创建不合理带来的问题

  1. 插入、更新和删除性能下降:索引需要额外的存储空间来维护数据结构,每次执行插入、更新或删除操作时,数据库不仅要修改数据本身,还要同时更新相关的索引。如果索引不合理,例如创建了过多不必要的索引,会导致这些操作变得更加耗时。
  2. 索引维护成本增加:不合理的索引可能会导致索引碎片增加,数据库需要花费更多的资源来进行索引的维护,如重建索引、优化索引结构等操作,这会影响数据库整体的性能和资源利用率。
  3. 查询性能不升反降:如果索引字段选择不当,例如选择了选择性低(重复值多)的字段创建索引,MySQL在查询时可能不会选择使用该索引,甚至可能导致查询优化器生成不合理的执行计划,最终使得查询性能不升反降。