パフォーマンスの違いは単純に、SUM を計算するためにすべてのデータを同時にメモリに格納する必要がないためです。
SUM を求めるクエリをデータベースに直接発行すると、ディスクから各レコードを読み取り、現在の合計をメモリ内の 1 つの変数に累積してから、次のレコードを読み取ることができます。すべてのレコードをメモリ内に保持する必要はありません。同時に。さらに重要なことは、これらのレコードを処理のためにネットワーク経由で他のサーバーに送信する必要がないことです。結果の SUM を最後に単一の数値として送信するだけで済みます。
さらに、全体の SUM は全体の個別のサブセットの SUM に等しいため、SUM は並列化できます。たとえば、データが分割されている場合、データベースは複数のクエリを発行して異なるセッションで実行できます。データのその部分を合計すると、制御セッションは各パーティションの結果を単純に合計できます。
Java プログラムで配列を使用して合計を計算する場合、最初にデータベースにクエリを発行して、必要なすべてのデータを要求する必要があります。すべてのデータをデータベースからアプリ サーバーに転送する必要があり、そのすべてのデータを格納するためにメモリを割り当てる必要があります。その後、プログラムはメモリ内の配列を反復処理し、Sum を計算します。次に、おそらくメモリから配列を解放する必要があります。
データの量が少ない場合、パフォーマンスの違いはおそらく重要ではありません。ただし、ボリュームが大きい場合、その差は非常に大きいと予想できます。