【问题标题】:Performance between the subquery and join?子查询和连接之间的性能?
【发布时间】:2011-09-20 19:20:20
【问题描述】:
Both queries generates a list of department IDs along with the number
of employees assigned to each department. 

我可以使用连接和子查询获得上述结果,但我很想知道 两个查询如何根据performance 工作,哪个更好:连接或子查询。 我为这两个查询添加了解释计划屏幕截图,但我不明白这是什么意思。

使用加入

SELECT d.dept_id, d.name, count(emp_id) AS num_employee
FROM department d INNER JOIN employee e ON e.dept_id = d.dept_id
GROUP BY dept_id;

使用子查询

SELECT d.dept_id, d.name, e_cnt.how_many num_employees
FROM department d INNER JOIN
(SELECT dept_id, COUNT(*) how_many
FROM employee
GROUP BY dept_id) e_cnt
ON d.dept_id = e_cnt.dept_id;

【问题讨论】:

标签: mysql sql performance join subquery


【解决方案1】:

正如您在执行计划中看到的那样,连接显然更好。 :P

子选择使用索引来获取初始表(计数(*),dept_id),然后使用缓冲表连接到外部选择语句以获得结果。

内连接使用部门和员工的索引来确定匹配的行,从而节省了缓冲区表的创建和初始索引查找。

【讨论】:

  • 我没有得到那个执行计划你能详细解释一下吗?
猜你喜欢
  • 1970-01-01
  • 2012-10-29
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多