2011-09-02 32 views
2

我一直很好奇我应该使用哪种SQL连接方法。以下两个查询执行完全相同的功能,哪两个更好?这两个sql连接中的哪一个会表现更好?

SELECT p.LastName, p.FirstName, o.OrderNo 
FROM Persons p 
INNER JOIN Orders o 
ON p.P_Id = o.P_Id 

SELECT p.LastName, p.FirstName, o.OrderNo 
FROM Persons p, Orders o 
WHERE p.P_Id = o.P_Id 

总之,INNER JOIN这个词实际上是否比'WHERE x = y'表现得更好?

+2

没有将他们拥有的任何合理的RDBMS的 –

+0

可能重复相同的执行计划[是一个连接比快在哪里?](http://stackoverflow.com/questions/1129923/is-a-join-faster-a-where) –

+1

你可以通过运行它们并查看执行计划轻松地找到自己(我真的试图因为这个问题而低估了问题) –

回答

1

第1种情况是在sql server中使用的ANSI标准版本,而第2种情况是之前使用过的语法并折旧了。 Go through this

SELECT p.LastName, p.FirstName, o.OrderNo FROM Persons p INNER JOIN Orders o ON p.P_Id = o.P_Id 

SELECT p.LastName, p.FirstName, o.OrderNo FROM Persons p, Orders o WHERE p.P_Id = o.P_Id 

两个查询的性能。因此将同一

请注意,如果您的查询已经有点不同。即

SELECT p.LastName, p.FirstName, o.OrderNo FROM Persons p LEFT JOIN Orders o ON p.P_Id = o.P_Id AND p.Id = 1 

Vs的

SELECT p.LastName, p.FirstName, o.OrderNo FROM Persons p LEFT JOIN Orders o ON p.P_Id = o.P_Id WHERE p.Id = 1 

在这种情况下的查询将工作完全不同。两个查询的输出都会有所不同。

对于理解这个... See this

1

它并不重要。良好的DBMS将其优化为相同的代码,实质上使它们相同。