Web を検索して、JDBC 呼び出しがデータベース管理システムにどのように送信されるかを調べました。私が知りたいのは、データベースがローカルであっても、JDBC 呼び出しが DBMS と通信するためにネットワーク トラフィックを生成するかどうかです。
2 つの別個の SQLSELECT
ステートメントが、JOIN
.
簡単な答えは、JDBC ドライバーを使用することです。
ドライバーは、JVM が実行されている基盤となるオペレーティング システムのネイティブ ライブラリに依存する ODBC を利用するため、プラットフォームに依存します。また、このドライバーを使用すると、他のインストール依存関係が発生します。たとえば、ドライバーがインストールされているコンピューターに ODBC がインストールされている必要があり、データベースが ODBC ドライバーをサポートしている必要があります。pure-Java ドライバーの代替手段が利用可能な場合、このドライバーの使用はお勧めできません。もう 1 つの意味は、タイプ 1 ドライバーを使用するすべてのアプリケーションは、ドライバーとプラットフォーム間のバインディングを考えると、移植性がないということです。このテクノロジは、トランザクションの多い環境には適していません。タイプ 1 ドライバーも完全な Java コマンド セットをサポートしておらず、ODBC ドライバーの機能によって制限されています。
詳しくはこちら
2 つの別個の SQL SELECT ステートメントが、JOIN を使用した 1 つの SQL ステートメントよりもコストがかかる理由を議論する必要があります。
シチュエーションにもよるとは思いますが。JOIN
ほとんどの場合、パフォーマンスが向上すると言われていますが。SELECT
ただし、ステートメントが優先される特定のシナリオ (少数ではありますが) が見つかる場合があります。
ほとんどの場合Join
、JOIN を使用することでオーバーヘッドが削減され、スキャンする必要があるテーブルの数がわかっているため、データベースが多くの最適化を実行できるため、通常は複数の単一の SELECT よりも優れていると言えます。
いずれのシナリオでも、クエリをデータベース サーバーに渡すコストは、クエリの結果を計算してアプリケーションに返すコストに比べれば、ごくわずかです。
@RahulTripathiが述べたように、シナリオに応じて、最新の考慮事項のいずれかによって、どちらの方法を使用するかを決定できます。通常、大まかに言えば、選択、射影、および結合など、データベースが得意とすることをデータベースに任せることです。
場合によっては、代わりに 2 つの個別の選択を実際に実行したい場合もあります。たとえば、データベース設計者が予期していなかった方法でテーブルを結合した場合 (外部キーではない列、および/または主キーではない列、またはインデックス化されていない列に対して)、データベースは "非常に忙しい" 場合は、2 つ選択した方がよい場合があります。
多数のフィールドを持つ小さなテーブルに大きなテーブルを結合する場合、特に 2 番目のテーブルがあまり変更されていない場合は、クエリを 2 つに分割することをお勧めします。その場合、さらに先に進むことができます。2 番目のテーブルのレコードをキャッシュし、最初のテーブルのみをクエリすることができます。
しかし、上で述べたように、単一の SELECT クエリを使用しない正当な理由が必要です。