2011-09-02 62 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將其優化爲相同的代碼,實質上使它們相同。