2

MySqlデータベースに約10000行あり、複数の値(合計、中央値、平均...)を計算したいとしましょう。

  • 単純な SQL クエリで 10000 をすべてフェッチし、Java を使用して反復処理し、計算を実行するか、SQL クエリを直接実行する (select sum(..); select count(*)...) のどちらが高速ですか? 必要な値を返すクエリを 1 つだけ実行することは可能ですか?

編集

  • 件名に関するメトリック/統計はありますか?
  • 2つまたは3つのテーブルを結合してデータを取得できます

ありがとう

4

4 に答える 4

4

Javaでコードを記述するよりも、 MySQL関数を使用する方が優れた高速なオプションです。これは、MySQL 関数が Java よりもデータに近いためです。また、データベース (MySQL) 関数は、そのような関数に対して非常に最適化されています。

Java を使用する場合は、ロジックを適用する前に、最初にその量のデータをメモリにロードします。

于 2012-11-15T04:25:49.137 に答える
3

場合によります

ここにいるほとんどの人は、データなどに近いため、より高速であると述べています.

しかし、それは真実である必要はありません。

たとえば、フィルタリング基準が複雑で、結果の数がレコードの総数に近い場合、DB マシンが非常に高速でなく、アプリが非常に遅い場合など、DB に単純なジョブ (取得すべてのレコード) とアプリケーションでの作業は、代わりにはるかに高速になります。(DB のスケーラビリティの低さについては触れていません。DB でのフィルタリングがアプリよりも遅くなるシナリオが多くあります)

したがって、経験則はありません。

私の提案は、シンプルでわかりやすいフィルタリング/集計をDBに入れ、DBに得意な仕事をさせることです。フィルタリングのためにさらに複雑な計算が必要な場合は、アプリケーション コードで行います (そして、DB でフィルタリングされた結果に対して実行します)。

于 2012-11-15T04:34:26.840 に答える
1

MySql クエリは高速になり、メモリと CPU 時間も大幅に節約されます。その一般的なロジック。

于 2012-11-15T04:27:19.983 に答える
0

もちろん例外はありますが、一般的には、データベース エンジンにデータのフィルタリング、集計、並べ替えなどを実行させるのが最善です。データベースは、これらを処理するように設計されています。

于 2012-11-15T04:30:22.420 に答える