首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >显式SQL连接与隐式SQL连接

显式SQL连接与隐式SQL连接
EN

Stack Overflow用户
提问于 2008-09-04 22:49:58
回答 11查看 196.4K关注 0票数 450

显式内连接和隐式内连接之间是否存在效率差异?例如:

代码语言:javascript
复制
SELECT * FROM
table a INNER JOIN table b
ON a.id = b.id;

代码语言:javascript
复制
SELECT a.*, b.*
FROM table a, table b
WHERE a.id = b.id;
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 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

票数 154
EN

Stack Overflow用户

发布于 2008-09-04 23:23:25

就我个人而言,我更喜欢连接语法,因为它使表的连接以及它们如何连接变得更加清晰。试着比较更大的SQL查询,当你从8个不同的表中选择时,你在where中有很多过滤。通过使用join语法,您可以将表连接的部分与筛选行的部分分开。

票数 146
EN

Stack Overflow用户

发布于 2012-04-25 09:43:27

在MySQL 5.1.51上,两个查询具有相同的执行计划:

代码语言:javascript
复制
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行。

这是一个非常简单的情况;它绝不能证明查询优化器在更复杂的情况下不会混淆并生成不同的计划。

票数 63
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档