MySQL性能:JOIN ON vs WHERE

25 浏览
0 Comments

MySQL性能:JOIN ON vs WHERE

在运行连接查询时,使用\"JOIN ON\"和\"WHERE\"子句是否在性能上有区别?(不考虑表的数量或表中条目的数量)\n不确定是否已经讨论过这个话题。即使已经讨论过,我也想知道在最新版本的MySQL(5.1及以上)中是否有所改变。\n一个Explain语句清楚地显示了在考虑的行数上的很大差异。\n我正在使用的语法是:\n

使用JOIN ON

\n

SELECT <字段名>
FROM <表1>
JOIN <表2> ON <连接条件>
AND JOIN <表3> ON <连接条件>
AND JOIN <表4> ON <连接条件>
....

\n

使用WHERE

\n

SELECT <字段名>
FROM <以逗号分隔的表名列表>
WHERE <连接条件>
AND <连接条件>
AND <连接条件>
....

\n因此,不确定使用JOIN ON还是WHERE子句是否会有所区别。请帮助。

0
0 Comments

MySQL性能:JOIN ON vs WHERE

在使用JOIN语句时,我怀疑使用的是"LEFT JOIN"。尝试使用"INNER JOIN",然后查看explain语句是否相同。

SELECT <字段名>
FROM <表1>
INNER JOIN <表2> ON <连接条件>
INNER JOIN <表3> ON <连接条件>
INNER JOIN <表4> ON <连接条件>
...

当使用内连接时,我不会期望你的两个查询之间有性能差异。我更关心是否有适当的索引。确保连接条件可以使用索引列进行匹配。

这将会令人惊讶。"LEFT JOIN"是"LEFT OUTER JOIN"的同义词。请查阅文档:dev.mysql.com/doc/refman/5.1/en/join.html

你是对的。忽略我最初的说法。

"JOIN ... ON"是"INNER JOIN"的同义词,而没有"ON"的"JOIN"是"CROSS JOIN"的同义词。文档:dev.mysql.com/doc/refman/5.0/en/join.html

原文链接:[MySQL Performance: JOIN ON vs WHERE](http://dev.mysql.com/doc/refman/5.1/en/join.html)

0
0 Comments

MySQL性能:JOIN ON vs WHERE

在处理数据库查询时,我们经常会遇到JOIN ON和WHERE两种不同的方法。JOIN ON是一种显式的连接方式,而WHERE则是一种隐式的连接方式。那么为什么会出现这个问题呢?以及如何解决呢?

原因:

这个问题的出现是因为JOIN ON和WHERE两种方式在查询逻辑上存在一些差异。JOIN ON是在查询时显式地将两个表连接在一起,而WHERE则是在查询结果集上进行过滤。因此,当使用JOIN ON时,查询的逻辑更加清晰明确,可以在不同的数据库引擎中移植,而不需要对查询逻辑进行重大改变。

解决方法:

为了解决这个问题,我们可以采用JOIN ON方式来替代WHERE方式。在使用JOIN ON时,我们需要将查询的条件直接放在JOIN ON子句中,这样可以使查询逻辑更加清晰,也更容易在不同的数据库引擎中移植。

下面是一个示例,展示了如何使用JOIN ON来替代WHERE方式:

SELECT *
FROM table1
JOIN table2 ON table1.id = table2.id
WHERE table1.column = 'value'

可以将上述查询改写为:

SELECT *
FROM table1
JOIN table2 ON table1.id = table2.id AND table1.column = 'value'

通过这种方式,我们可以更好地管理查询的逻辑,并且能够更容易地移植到不同的数据库引擎中。

在处理数据库查询时,我们需要选择合适的连接方式,以便更好地管理查询的逻辑和提高查询的性能。通过使用JOIN ON方式替代WHERE方式,我们可以使查询逻辑更加清晰明确,并且能够更容易地在不同的数据库引擎中移植。这样可以提高查询的效率,同时也能够减少维护和调试的工作量。

0