Mysql 子查询和联接之间的性能?

Mysql 子查询和联接之间的性能?,mysql,sql,performance,join,subquery,Mysql,Sql,Performance,Join,Subquery,我可以使用联接和子查询获得上述结果,但我非常想知道 这两个查询在性能方面的工作方式:联接还是子查询。 我为这两个查询添加了解释计划屏幕截图,但我不明白它的意思 使用Join Both queries generates a list of department IDs along with the number of employees assigned to each department. 使用子查询 SELECT d.dept_id, d.name, count(emp_id) AS

我可以使用联接和子查询获得上述结果,但我非常想知道 这两个查询在性能方面的工作方式:联接还是子查询。 我为这两个查询添加了解释计划屏幕截图,但我不明白它的意思

使用Join

Both queries generates a list of department IDs along with the number
of employees assigned to each department. 

使用子查询

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;

正如您在执行计划中所看到的那样,加入显然更好:P

subselect使用索引获取初始表(count(*),dept_id),然后使用缓冲表连接到外部select语句以获取结果


内部联接使用department和employee上的索引来确定匹配行,从而节省了创建缓冲区表和初始索引查找的时间。

从执行计划中可以看出,联接显然更好。:P

subselect使用索引获取初始表(count(*),dept_id),然后使用缓冲表连接到外部select语句以获取结果


内部联接使用department和employee上的索引来确定匹配行,从而节省了创建缓冲表和初始索引查找的时间。

根据经验法则,联接在性能方面也几乎总是更好的(用于解释
类型
列)这个应用程序的名称是什么?@WadihM。我使用的是Toad IDE for MySQL。根据经验,join在性能方面几乎总是更好。另外(解释
type
column)这个应用程序的名称是什么?@WadihM。我正在使用Toad IDE for MySQL。我没有得到执行计划,你能详细解释一下吗?我没有得到执行计划,你能详细解释一下吗?
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;