MST

星途 面试题库

面试题:MySQL查询执行计划之中等难度题

假设有两个表,`employees`表(包含`employee_id`、`name`、`department_id`等字段)和`departments`表(包含`department_id`、`department_name`等字段),现在要查询每个部门的员工数量,并按员工数量降序排列。请写出对应的SQL语句,并解释该查询的执行计划中可能涉及的关键步骤,例如连接类型、索引使用情况等。
40.8万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试
SELECT d.department_name, COUNT(e.employee_id) AS employee_count
FROM departments d
JOIN employees e ON d.department_id = e.department_id
GROUP BY d.department_id, d.department_name
ORDER BY employee_count DESC;

执行计划关键步骤解释:

  1. 连接类型
    • 使用JOIN操作将departments表和employees表连接起来。这里使用的是内连接(隐式内连接,在ON条件中指定连接条件),确保只有在departments表和employees表中department_id匹配的记录才会被包含在结果集中。
  2. 索引使用情况
    • 如果在departments表的department_id字段和employees表的department_id字段上都有索引,数据库在执行连接操作时可以利用这些索引快速定位匹配的记录,从而提高连接效率。
    • 对于GROUP BY子句,如果department_iddepartment_name字段上有索引,在分组操作时也可能利用这些索引来快速定位和分组数据。
  3. 聚合操作
    • 使用COUNT(e.employee_id)对每个部门的员工进行计数。这是一个聚合函数,它会对每个分组(由GROUP BY定义)中的记录进行统计。
  4. 排序操作
    • ORDER BY employee_count DESC对聚合后的结果按照员工数量进行降序排列。如果employee_count字段上有索引,排序操作可能会利用该索引来加速排序过程。