2016-07-27 32 views
2

私はこの質問をどこにしなければならないのですか?Inner JoinInner Remote Joinの違いは何ですか?私は両方の実装しようとしている は、以下のように結合します内部結合VS内部の内部結合の違い

With Remote Inner Join

SELECT P.CompanyName,u.UserName from tb_Offices AS P 
INNER REMOTE JOIN 
tb_Users AS U 
on P.UserId=U.UserId 

With Simple Inner Join

SELECT P.CompanyName,u.UserName from tb_Offices AS P 
INNER JOIN 
tb_Users AS U 
on P.UserId=U.UserId 

両方のクエリは、レコードの同じ種類を返します。

それから私は実行計画を実行してみました:

enter image description here

を、簡単なInner Joinで私が得た:私が得たRemote Inner Join

enter image description here

私はあまり親切ではないSQL Execution Plan

Inner JoinInner Remote Joinのどちらが良いかを知りたかっただけです。

おかげ

+0

? – jarlh

+0

@jarlh私は 'MS SQL Server 2012'を使用しています –

答えて

2

あなたは

警告が表示されます使用する必要があります:結合順序があるため施行されましたローカル参加ヒントは です。

ヒントを使用すると、すべての可能な結合置換を調べるのではなく、書かれた順序でテーブルを結合する必要があります。

だから、これは別の実行計画を説明しOPTION (FORCE ORDER)

を指定すると同様の結果。

このヒントは、ローカルテーブルに使用するためのものではありません。

このようにして結合順序を強制的にこのように強制する例は非常に否定的です.Cの結合ですべての行を削除する前に大きな表AとBを先に結合する必要があるためです。オプティマイザが制約されていない(下の最初の計画)は、物事を(C x A)x Bに並べ替え、計画ははるかに効率的です。どのSQL Serverのバージョン

CREATE TABLE #A(X INT PRIMARY KEY); 
CREATE TABLE #B(X INT PRIMARY KEY); 
CREATE TABLE #C(X INT PRIMARY KEY); 

INSERT INTO #A 
SELECT TOP (10000000) ROW_NUMBER() OVER (ORDER BY @@SPID) FROM master..spt_values v1, master..spt_values v2 

INSERT INTO #B 
SELECT * FROM #A 

SELECT * 
FROM #A INNER JOIN #B ON #A.X = #B.X 
     INNER JOIN #C ON #A.X = #C.X 

SELECT * 
FROM #A INNER REMOTE JOIN #B ON #A.X = #B.X 
     INNER JOIN #C ON #A.X = #C.X 

DROP TABLE #A, #B,#C 

enter image description here

+0

あなたの努力のためにマーティンありがとう..) –

1

あなたは右の表は、リモートサーバー上にあり、左がローカルにある場合にのみ、REMOTEを使用するようにしてください。また、REMOTEは、左側の表の行が右側の表よりも少ない場合にのみ使用してください。https://msdn.microsoft.com/en-us/library/ms173815.aspx

+0

両方のデータベースが列 の分布統計情報を提供する場合に必要ですか? – jarlh

1

両方の表がローカルの場合、「リモート」ヒントは何も変更しないでください。

あなたのケースでは、実行計画の差が参加する中で使用される列から来ている:

P.fdUserId=U.fdUserId 

P.UserId=U.UserId 

をあなたのスキーマを知らなくても、私は内の列と言うでしょう2番目の問合せは索引付けされないため、クラスタ化索引の順序を使用して検索されるため、Sort操作が必要です。

0

内部リモート結合と内部結合は同じ結果を示しますが、内部のリモートの代わりに内部結合を使用することをお勧めします。何度も試してみて、同じことを返します。

0

リモート左の表は、ローカルテーブルで、右の表は、リモート・テーブルのときに便利です

  • に参加。左の表は、右の表より少ない行がある場合にのみ
  • REMOTEは、メッセージタブを見れば