MySQL性能:JOIN ON与WHERE

时间:2011-03-17 12:21:07

标签: mysql performance join

  

可能重复:
  MySQL: Inner join vs Where
  Explicit 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子句的使用是否会产生影响。请协助。

2 个答案:

答案 0 :(得分:3)

以下是对这两种方法的良好分析:SQL left join vs multiple tables on FROM line?

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

答案 1 :(得分:2)

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

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

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