【发布时间】: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;
【问题讨论】:
-
根据经验 - 就性能而言,连接几乎总是更好
-
另见dev.mysql.com/doc/refman/5.1/en/explain-output.html(
type列的解释) -
这个应用的名字是什么?
-
@WadihM。我正在使用 Toad IDE for MySQL。
标签: mysql sql performance join subquery