我最近遇到过这段SQL:
SELECT members.id
FROM members, members_to_groups
WHERE members.id = members_to_groups.memberId
AND members_to_groups.groupId = 1
现在我从来没有想过以这种方式进行连接,而是使用内连接:
SELECT members.id
FROM members
INNER JOIN members_to_groups ON members.id = members_to_groups.memberId
WHERE members_to_groups.groupId = 1
显然,第二种方式需要更多的代码,但是对这两种方法都有客观偏好,哪种方法最快?
答案 0 :(得分:4)
他们将以相同的速度执行,但每次使用第一种方法时,恐怖分子都会获胜。
第一种方法是sql的非可移植“旧”版本,对于更大的查询,要区分WHERE子句中用于连接表的内容以及用于过滤的内容要困难得多。
答案 1 :(得分:3)
您可以知道的唯一方法是检查执行计划,但隐式和显式内部联接会导致完全相同的执行计划,因此性能没有差异。显式连接更具可读性。
另外,@ gbn说implicit joins are not valid semantically。 :)
答案 2 :(得分:0)
WHERE members.id = members_to_groups.memberId => occurs at row level
,而
INNER JOIN members_to_groups ON members.id = members_to_groups.memberId => occurs at table level
因为,连接发生在表级而不是行级,所以它们更快