MST

星途 面试题库

面试题:MySQL中GROUP BY和DISTINCT优化场景对比

在一个员工表(包含员工ID、部门ID、薪资等字段)中,分别阐述使用GROUP BY和DISTINCT获取每个部门的唯一员工ID列表的场景,并且说明哪种场景下性能会更好,为什么?
46.3万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

GROUP BY场景

  • 场景阐述:当不仅需要获取每个部门的唯一员工ID列表,还可能需要对每个部门进行其他聚合操作,比如计算每个部门的平均薪资、员工数量等时,适合使用GROUP BY。例如,想知道每个部门有多少员工,以及这些员工的平均薪资,就可以使用GROUP BY。语法示例(以SQLite为例):
SELECT department_id, GROUP_CONCAT(employee_id) AS unique_employee_ids
FROM employees
GROUP BY department_id;

这里通过GROUP BY按部门ID分组,使用GROUP_CONCAT函数将每个部门的员工ID连接起来形成唯一员工ID列表。

DISTINCT场景

  • 场景阐述:当仅仅是想要获取每个部门的唯一员工ID列表,不涉及任何其他聚合计算时,使用DISTINCT会更加简洁直接。例如,只是单纯想知道每个部门都有哪些不同的员工ID。语法示例(以SQLite为例):
SELECT DISTINCT department_id, employee_id
FROM employees;

这里通过DISTINCT关键字对部门ID和员工ID组合进行去重,从而得到每个部门的唯一员工ID列表。

性能比较

  • 性能更好的场景及原因:在只获取每个部门唯一员工ID列表(不进行其他聚合操作)的场景下,DISTINCT性能通常更好。原因是DISTINCT只需要对结果集进行简单的去重操作,而GROUP BY除了分组去重外,还需要额外的资源来处理聚合函数(即使没有使用聚合函数,数据库在执行GROUP BY时也会进行一些额外的分组操作)。但如果还需要进行其他聚合计算,那么GROUP BY是必须的,虽然性能相对DISTINCT获取唯一列表时会差一些,但它能满足更复杂的业务需求。