MySQL 嵌入式 SELECT 与 JOIN

Posted

技术标签:

【中文标题】MySQL 嵌入式 SELECT 与 JOIN【英文标题】:MySQL Embedded SELECTs vs. JOINs 【发布时间】:2010-01-25 09:47:48 【问题描述】:

两者之间是否有明显区别:

SELECT userid, username, userdept,
    (SELECT deptname FROM depts WHERE deptid=userdept) AS deptname
    FROM users

SELECT userid, username FROM users
    INNER JOIN depts ON depts.deptid=users.userdept

哪个更好?

【问题讨论】:

【参考方案1】:

您的第二个查询具有更好的性能。

你可以看这个例子:http://www.codersrevolution.com/index.cfm/2008/7/31/mysql-performance-INNER-JOIN-vs-subselect

【讨论】:

【参考方案2】:

加入更好,

查看此链接: http://www.selikoff.net/2008/12/10/memo-avoid-nested-queries-in-mysql-at-all-costs/

【讨论】:

【参考方案3】:

您也可以在此主题上查看many discussion in SO。

【讨论】:

【参考方案4】:

这两个查询不是同义词。

如果您将INNER JOIN 替换为LEFT JOIN,它们将是同义词,但如果deptid 不是唯一的,则子查询可能会失败,而LEFT JOIN 将始终成功。

如果depts.deptid 上有一个UNIQUE 索引(很可能是,因为该字段很可能是PRIMARY KEY),那么性能差异可以忽略不计。

【讨论】:

以上是关于MySQL 嵌入式 SELECT 与 JOIN的主要内容,如果未能解决你的问题,请参考以下文章

EasyClick 之 MySQL 子查询

SQL多表链接查询、嵌入SELECT语句的子查询技术

将 mysql 嵌入和 --local-infile=1 与 c++ 一起使用?

第九章 SQL查询数据库

第九章 SQL查询数据库

最全解释Mysql 的join中on与where 过滤条件差异