MST
星途 面试题库

面试题:MySQL 中 EXPLAIN 输出的 key 字段含义及作用

在 MySQL 里,使用 EXPLAIN 分析查询执行计划时,其中 key 字段代表什么?它对查询优化起到怎样的作用?请举例说明。
26.9万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试
  1. key 字段含义
    • key字段表示 MySQL 在查询执行计划中实际使用的索引。如果为NULL,则表示没有使用索引。
  2. 对查询优化的作用
    • 提高查询效率:当key字段显示使用了合适的索引时,MySQL 可以通过索引快速定位到符合条件的数据行,避免全表扫描,从而大大提高查询速度。例如在一个包含大量用户信息的users表中,若经常根据user_id查询用户详细信息,在user_id字段上建立索引,查询时key字段显示使用该索引,查询速度会显著提升。
    • 帮助优化索引策略:通过查看key字段,可以判断当前索引是否被有效利用。若发现查询没有使用预期的索引(keyNULL),则需要考虑调整索引结构,比如添加复合索引、修改索引字段顺序等,以优化查询性能。
  3. 举例说明
    • 假设有一个employees表,结构如下:
    CREATE TABLE employees (
        id INT PRIMARY KEY,
        name VARCHAR(255),
        department VARCHAR(255),
        salary DECIMAL(10, 2)
    );
    
    • 执行查询:
    EXPLAIN SELECT * FROM employees WHERE id = 10;
    
    • 在执行计划中,如果key字段显示为PRIMARY,说明使用了id字段上的主键索引,这将快速定位到id10的记录。如果表中数据量很大,没有使用索引(keyNULL),则需要逐行扫描表中的每一条记录来查找id10的记录,查询效率会很低。

    • 再比如,若经常查询某个部门中工资高于一定数额的员工:

    EXPLAIN SELECT * FROM employees WHERE department = 'HR' AND salary > 5000;
    
    • 如果此时keyNULL,可以考虑在departmentsalary字段上建立复合索引CREATE INDEX idx_department_salary ON employees (department, salary);,再次执行EXPLAIN,若key字段显示idx_department_salary,则说明索引生效,查询性能会得到优化。