1

Web を検索して、JDBC 呼び出しがデータベース管理システムにどのように送信されるかを調べました。私が知りたいのは、データベースがローカルであっても、JDBC 呼び出しが DBMS と通信するためにネットワーク トラフィックを生成するかどうかです。

2 つの別個の SQLSELECTステートメントが、JOIN.

4

2 に答える 2

2

簡単な答えは、JDBC ドライバーを使用することです。

ここに画像の説明を入力

ドライバーは、JVM が実行されている基盤となるオペレーティング システムのネイティブ ライブラリに依存する ODBC を利用するため、プラットフォームに依存します。また、このドライバーを使用すると、他のインストール依存関係が発生します。たとえば、ドライバーがインストールされているコンピューターに ODBC がインストールされている必要があり、データベースが ODBC ドライバーをサポートしている必要があります。pure-Java ドライバーの代替手段が利用可能な場合、このドライバーの使用はお勧めできません。もう 1 つの意味は、タイプ 1 ドライバーを使用するすべてのアプリケーションは、ドライバーとプラットフォーム間のバインディングを考えると、移植性がないということです。このテクノロジは、トランザクションの多い環境には適していません。タイプ 1 ドライバーも完全な Java コマンド セットをサポートしておらず、ODBC ドライバーの機能によって制限されています。

詳しくはこちら

2 つの別個の SQL SELECT ステートメントが、JOIN を使用した 1 つの SQL ステートメントよりもコストがかかる理由を議論する必要があります。

シチュエーションにもよるとは思いますが。JOINほとんどの場合、パフォーマンスが向上すると言われていますが。SELECTただし、ステートメントが優先される特定のシナリオ (少数ではありますが) が見つかる場合があります。

ほとんどの場合Join、JOIN を使用することでオーバーヘッドが削減され、スキャンする必要があるテーブルの数がわかっているため、データベースが多くの最適化を実行できるため、通常は複数の単一の SELECT よりも優れていると言えます。

于 2013-09-06T19:57:46.943 に答える
1

いずれのシナリオでも、クエリをデータベース サーバーに渡すコストは、クエリの結果を計算してアプリケーションに返すコストに比べれば、ごくわずかです。

@RahulTripathiが述べたように、シナリオに応じて、最新の考慮事項のいずれかによって、どちらの方法を使用するかを決定できます。通常、大まかに言えば、選択、射影、および結合など、データベースが得意とすることをデータベースに任せることです。

場合によっては、代わりに 2 つの個別の選択を実際に実行したい場合もあります。たとえば、データベース設計者が予期していなかった方法でテーブルを結合した場合 (外部キーではない列、および/または主キーではない列、またはインデックス化されていない列に対して)、データベースは "非常に忙しい" 場合は、2 つ選択した方がよい場合があります。

多数のフィールドを持つ小さなテーブルに大きなテーブルを結合する場合、特に 2 番目のテーブルがあまり変更されていない場合は、クエリを 2 つに分割することをお勧めします。その場合、さらに先に進むことができます。2 番目のテーブルのレコードをキャッシュし、最初のテーブルのみをクエリすることができます。

しかし、上で述べたように、単一の SELECT クエリを使用しない正当な理由が必要です。

于 2013-09-06T20:52:26.883 に答える