3

大量のデータで満たされた非常に大きなテーブルがあり(たとえば、メモリに快適に収まらないほど)、行のサブセットを分析したいとします。

一般的に実行する方が速いですか:

SELECT (column1, column2, ... , columnN) FROM table WHERE (some complicated boolean clause);

次に、ResultSetを使用します。または、次のように実行する方が高速です。

SELECT (column1, column2, ... , columnN) FROM table;

次に、ResultSetを反復処理し、ブール条件のJavaバージョンに基づいて異なる行を受け入れますか?

Javaイテレータ/ブールエバリュエーターがMySQLブールエバリュエーターよりも高速であるかどうかにかかっていると思います。

4

4 に答える 4

13

条件をデータベースに送信する方がほぼ確実に高速です。

  • データが不要な大量の行を転送することは避けてください。
  • データベースは、テーブルスキャンよりも高速なものを使用する場合があります。すべての行の条件をチェックしなくても、関心のある行をより迅速に見つけることができるインデックスを使用できる場合があります。
于 2010-04-24T22:02:13.430 に答える
4

Javaイテレータ/ブールエバリュエーターがMySQLブールエバリュエーターよりも高速であるかどうかにかかっていると思います。

いいえ。決定的な要因は、ほぼ確実に、ネットワークを介して転送する必要のあるデータの量(およびさまざまなオーバーヘッド)です。DBサーバーの結果セットのサイズを減らすことは、99%の確率で正しいことです。これは、結合が小さくなる可能性がある複雑なクエリで特に当てはまります。

于 2010-04-24T22:04:53.533 に答える
3

原則として、データベースが優先されます。それはほぼ間違いなくあなたの場合です。ただし、確認したい場合は、プロファイルしてください。他の言語では、多くのデータを転送するオーバーヘッドが、一部の処理が DB の外部で実行されるよりもはるかに高速であるという事実によって相殺されるケースに遭遇しました。評価しているブール条件がリレーショナル用語で表現するのが非常に複雑である場合、Java で評価する利点が見られる可能性がありますが、その可能性はほとんどありません。

于 2010-04-25T02:35:24.713 に答える
1

データベースは、タスクを最適化するように設計されています。あなたの言語はそうではありませんでした。また、データベースには、ワークステーションが実行している他のすべてのものよりも、ディスク操作を防ぐための優れたキャッシュリソースが含まれている可能性があります。

これは、Excelがメモリに保持できるよりも大きいデータを使用して、最初にデータをExcelにダウンロードする必要があるかどうかを尋ねるのと少し似ています。

于 2010-04-24T22:05:10.303 に答える