面试题答案
一键面试性能瓶颈分析
- 全表扫描:如果
employees
表数据量较大,且没有合适索引,数据库需要逐行扫描每一条记录,检查age > 30
和department = 'HR'
这两个条件,这会导致查询性能低下。
索引优化建议
- 复合索引:可以创建一个包含
age
和department
字段的复合索引。创建语句如下:
这样在查询时,MySQL 可以利用这个索引快速定位到满足CREATE INDEX idx_age_department ON employees (age, department);
age > 30
且department = 'HR'
的记录,避免全表扫描,从而提高查询性能。在复合索引中,字段顺序很重要,一般把选择性高(区分度大)的字段放在前面,这里age
范围查询也能利用索引的部分优势。如果department
区分度更高,也可考虑将其放在前面。 - 覆盖索引:如果查询字段仅包含
id
、name
、age
、department
中的部分字段,还可以考虑创建覆盖索引,即索引包含查询所需要的所有字段,这样查询时直接从索引中获取数据,无需回表操作,进一步提高性能。例如,如果只查询name
字段,创建索引语句如下:CREATE INDEX idx_age_department_name ON employees (age, department, name);