显式内连接和隐式内连接之间是否存在效率差异?例如:
SELECT * FROM
table a INNER JOIN table b
ON a.id = b.id;
与
SELECT a.*, b.*
FROM table a, table b
WHERE a.id = b.id;
发布于 2008-09-04 22:56:56
在性能方面,它们是完全相同的(至少在SQL Server中是这样)。
PS:请注意,从SQL Server2005开始就不再推荐使用IMPLICIT OUTER JOIN
语法。(仍支持问题中使用的IMPLICIT INNER JOIN
语法)
Deprecation of "Old Style" JOIN Syntax: Only A Partial Thing
发布于 2008-09-04 23:23:25
就我个人而言,我更喜欢连接语法,因为它使表的连接以及它们如何连接变得更加清晰。试着比较更大的SQL查询,当你从8个不同的表中选择时,你在where中有很多过滤。通过使用join语法,您可以将表连接的部分与筛选行的部分分开。
发布于 2012-04-25 09:43:27
在MySQL 5.1.51上,两个查询具有相同的执行计划:
mysql> explain select * from table1 a inner join table2 b on a.pid = b.pid;
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+
| 1 | SIMPLE | b | ALL | PRIMARY | NULL | NULL | NULL | 986 | |
| 1 | SIMPLE | a | ref | pid | pid | 4 | schema.b.pid | 70 | |
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+
2 rows in set (0.02 sec)
mysql> explain select * from table1 a, table2 b where a.pid = b.pid;
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+
| 1 | SIMPLE | b | ALL | PRIMARY | NULL | NULL | NULL | 986 | |
| 1 | SIMPLE | a | ref | pid | pid | 4 | schema.b.pid | 70 | |
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+
2 rows in set (0.00 sec)
table1
有166208行;table2
大约有1,000行。
这是一个非常简单的情况;它绝不能证明查询优化器在更复杂的情况下不会混淆并生成不同的计划。
https://stackoverflow.com/questions/44917
复制相似问题