SQLクエリから入力され、テーブルのすべての行を含むArrayListがあります。
このArrayListのサブセットが必要な場合(WHERE column1 = xなど)
、SQL接続を作り直してこの条件でクエリをフェッチするか、arraylistをループしてデータをフィルタリングする方が速いですか?(1000行の配列リストを考慮)
arraylist を介したループがより高速である場合、適用可能なサイズまでは?
ありがとうございました
Java でこれを行う方が常に高速です。メモリ配列の Java フィルタリングは、SQL と同じかそれよりも高速です。また、データベースへの接続、コマンドの送信、および回答のデコードのオーバーヘッドも考慮する必要があります。
非常に複雑なクエリの場合、これを SQL で実行する方が簡単な場合があります。また、データベースのサイズに関しては、おそらくより適切にスケーリングできます (100 万行を考えてみてください。それらすべてをメモリに保持しますか?)。また、SQL クエリ オプティマイザは、列のカーディナリティに関するより多くの情報を持っている可能性があり、より効率的に実行できるため、チェックごとに単に高速な Java コードよりも全体的に高速になります。
一方で、コードの保守性も考慮してください。そのように少し遅くても、SQL に任せたほうがよいものもあります。
すでにすべてがメモリにある場合、特にそのような少量の行の場合、データベースへのプロセス間呼び出しを行うよりもリストをフィルタリングする方が高速になると思います。
しかし、そもそも完全なリストをメモリに保持するのは奇妙に思えます。データベースは高速で、必要なときに必要なデータを返すために存在します。このような小さなテーブルの内容をメモリにキャッシュすると、おそらくアプリケーションがより複雑になり、速度が大幅に向上することはありません。パフォーマンスの問題がなく、テーブルの内容をキャッシュすることで問題が解決することが証明されない限り、アプリケーションを可能な限りステートレスに保つようにします。