MST

星途 面试题库

面试题:MySQL查询性能瓶颈之索引相关分析

在MySQL中,有一张员工表employees,包含字段id(主键)、name、age、department。现有一个查询语句 `SELECT * FROM employees WHERE age > 30 AND department = 'HR';`,请分析此查询可能存在的性能瓶颈,并说明如何通过索引优化。
10.7万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

性能瓶颈分析

  1. 全表扫描:如果 employees 表数据量较大,且没有合适索引,数据库需要逐行扫描每一条记录,检查 age > 30department = 'HR' 这两个条件,这会导致查询性能低下。

索引优化建议

  1. 复合索引:可以创建一个包含 agedepartment 字段的复合索引。创建语句如下:
    CREATE INDEX idx_age_department ON employees (age, department);
    
    这样在查询时,MySQL 可以利用这个索引快速定位到满足 age > 30department = 'HR' 的记录,避免全表扫描,从而提高查询性能。在复合索引中,字段顺序很重要,一般把选择性高(区分度大)的字段放在前面,这里 age 范围查询也能利用索引的部分优势。如果 department 区分度更高,也可考虑将其放在前面。
  2. 覆盖索引:如果查询字段仅包含 idnameagedepartment 中的部分字段,还可以考虑创建覆盖索引,即索引包含查询所需要的所有字段,这样查询时直接从索引中获取数据,无需回表操作,进一步提高性能。例如,如果只查询 name 字段,创建索引语句如下:
    CREATE INDEX idx_age_department_name ON employees (age, department, name);