2 つのテーブルを結合するか、2 つの個別のクエリを使用するかの二分法について簡単な質問があります。
既存の質問を見つけたいと思っていましたが、検索してもあまりヒットしませんでした (ほとんどの質問はより複雑な問題に関するものでした)。
たとえば、非常に単純なスキーマを持つ 2 つのテーブル A と X があるとします。
Table A +-------------+-------------+-------------+
| Column A (*)| Column X(FK)| Column C |
+-------------+-------------+-------------+
Table X +-------------+-------------+-------------+
| Column X (*)| Column Y | Column Z |
+-------------+-------------+-------------+
列 A と X は ID 列と主キー (bigint) です。テーブル A と X の間には、列 X の既存の外部キー関係もあります。
私の質問は、両方のテーブルが十分に大きい (たとえば 500K 行) と仮定すると、単一のクエリを使用することでパフォーマンスの点でより多くのメリットが得られるでしょうか (以下の Linq2Sql 擬似コードを参照)、または 2 つの別個のクエリを使用することでしょうか?
オプション1:
long aValue = 107;
DataContext dc = new DataContext();
var items = (from a in dc.TableA
join x in dc.TableX
on a.X equals x.X
where a.A == aValue
select new { a, x });
オプション 2:
- 2 つの個別の select ステートメントを連続して実行する SP を作成するとします。
問題をさらに定量化するために、A のすべての値に対して、テーブル Y から結合される行はわずか (0 ~ 5) であるため、結合で返されるテーブル A のデータの重複は重要ではないと仮定できます。
DBサーバーへの影響の観点から厳密にお願いしています。したがって、クライアント側の考慮事項 (ラウンドトリップ ネットワークの遅延、L2S クエリの構築、データ マーシャリングのコストなど) を無視すると、私の質問は次のとおりです。
DB サーバーでの計算に時間がかからないオプションはどれですか?
結果を評価するために必要なメモリが少ないオプションはどれですか?
ベスト プラクティスがある場合、どのオプションが一般的に好まれますか?
これが初歩的すぎるように聞こえる場合は申し訳ありませんが、洞察をいただければ幸いです。
ありがとう - K.