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 JOIN
是 LEFT OUTER JOIN
的同义词。查看文档:dev.mysql.com/doc/refman/5.1/en/join.html
你是对的。忽略我最初的陈述。
JOIN ... ON
是 INNER JOIN
的同义词,JOIN
没有 ON
是 CROSS 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
.where(...).Any() 与 ..Any(...) 之间的性能差异 [重复]
MYSQL:SELECT或者DELETE,在性能方面比较好避免重复