MySQL 性能:加入与 WHERE [重复]

Posted

技术标签:

【中文标题】MySQL 性能:加入与 WHERE [重复]【英文标题】:MySQL Performance: JOIN ON vs WHERE [duplicate] 【发布时间】:2011-07-17 08:55:00 【问题描述】:

可能的重复:mysql: Inner join vs WhereExplicit vs implicit SQL joins

当我们使用“JOIN ON”和“WHERE”子句运行连接查询时,性能方面有什么不同吗? (不分表数或表中条目数)

不确定这个话题是否已经讨论过了。即使是这样,我想知道最新版本的 mySQL(5.1 及更高版本)是否发生了变化。

解释语句清楚地表明考虑的行数存在很大差异。

我使用的语法是:

使用 JOIN ON

SELECT <field names>
FROM <table1>
JOIN <table2> ON <join_condition>
AND JOIN <table3> ON <join_condition> 
AND JOIN <table4> ON <join_condition> 
.... 

使用 WHERE

SELECT <field names> 
FROM <table names list separated by comma> 
WHERE <join_condition> 
AND <join_condition> 
AND <join_condition> 
.... 

所以不确定使用 JOIN ON 或 WHERE 子句是否会有所不同。请协助。

【问题讨论】:

***.com/questions/5273942/mysql-inner-join-vs-where 和 ***.com/questions/44917/… 的副本 嗯...毕竟它可能不是重复的,因为 Vasanthakumar 建议解释计划不同。你能提供这些计划吗? 不知道 MySQL 但在 Oracle 中这些是完全等价的。 那些“可能的重复”与这个问题不一样,人。 【参考方案1】:

我怀疑使用“JOIN”正在执行“LEFT JOIN”。尝试使用“INNER JOIN”并查看说明语句是否相同。

SELECT <field names>
FROM <table1>
INNER JOIN <table2> ON <join_condition>
INNER JOIN <table3> ON <join_condition> 
INNER JOIN <table4> ON <join_condition> 
...

使用内部联接时,我不希望您的两个查询之间存在性能差异。我会更担心拥有正确的索引。确保连接条件可以使用索引列进行匹配。

【讨论】:

那将是相当令人惊讶的。 LEFT JOINLEFT OUTER JOIN 的同义词。查看文档:dev.mysql.com/doc/refman/5.1/en/join.html 你是对的。忽略我最初的陈述。 JOIN ... ONINNER JOIN 的同义词,JOIN 没有 ONCROSS JOIN 的同义词。文档:dev.mysql.com/doc/refman/5.0/en/join.html【参考方案2】:

下面是对这两种方法的一个很好的分析:SQL left join vs multiple tables on FROM line?

这个解释是笼统的,我不太清楚MySQL在这件事上是做什么的;但无论哪种方式,关键是 JOIN 总是更加明确和清晰,并且可以从一个引擎移动到另一个引擎,而查询逻辑不会发生重大变化。

【讨论】:

以上是关于MySQL 性能:加入与 WHERE [重复]的主要内容,如果未能解决你的问题,请参考以下文章

与来自 JOIN 的 WHERE 一起加入 [重复]

.where(...).Any() 与 ..Any(...) 之间的性能差异 [重复]

MYSQL:SELECT或者DELETE,在性能方面比较好避免重复

MySql:WHERE NOT EXISTS(跳过重复项)与 group by

SQL'WHERE'与'ON'(内部连接)[重复]

如何在 Laravel 中 MySQL 查询的 where 子句中使用数组 [重复]