JOIN條件順序會影響性能嗎?我有兩個表A和B.我想加入他們這樣的:SQL連接條件順序執行
SELECT * FROM A
INNER JOIN B on B.ID_A = A.ID
在這種情況下火鳥使用NATURAL
計劃,而不是使用外鍵。
SELECT * FROM A
INNER JOIN B on A.ID = B.ID_A
工作良好。
這是正常的嗎?
JOIN條件順序會影響性能嗎?我有兩個表A和B.我想加入他們這樣的:SQL連接條件順序執行
SELECT * FROM A
INNER JOIN B on B.ID_A = A.ID
在這種情況下火鳥使用NATURAL
計劃,而不是使用外鍵。
SELECT * FROM A
INNER JOIN B on A.ID = B.ID_A
工作良好。
這是正常的嗎?
我想你使用Firebird的版本高於2.5.4(可能是2.5.3)。它在2.5.4中修復了bug http://tracker.firebirdsql.org/browse/CORE-4530。請升級到Firebird 2.5.5並檢查您的問題是否消失。
我對firebird不熟悉,但通常對於內部連接並不重要。 而在新版本的Oracle或SQLServer或MySQL或Postgresql中,它不會影響性能。我們已經解釋了檢查數據庫的計劃,選擇正確的加入方式可以嘗試它。
這個查詢是確定的,但要確保B.ID_A
是指數(用於快速性能)
不要在SQL查詢中使用*
,只使用需要的列...
你的問題是關於性能,所以我想,你有非常大的數據.. 所以必須使用LIMIT
您查詢......
例
SELECT A.ID, A.column1, B.column2, FROM A
INNER JOIN B on B.ID_A = A.ID LIMIT 0,100
我只是寫了'*'例如。據我所知,Firebird會自動爲外鍵創建一個索引。但它在第一種情況下不使用此索引。 –
不影響內連接,但使用左連接和右連接會影響性能。 –
您使用哪種Firebird版本?我從來沒有見過Firebird這樣的問題,所以也許它只是其中一個版本中的錯誤... –
@MaximVotyakov我正在使用Firebird 2.5 –