それは多くの要因に依存しますが、最も重要なのは:
- 計算の複雑さ(スケールアウトするため、アプリサーバーで複雑なクランチを実行することをお勧めします ;スケールアップするデータベースサーバーではなく )
- データの量(大量のデータにアクセス/集約する必要がある場合は、dbサーバーで実行すると帯域幅が節約され、集約がインデックス内で実行できる場合はディスクIOが節約されます)
- 利便性(SQLは複雑な作業には最適な言語ではありません。特に手続き型の作業には適していませんが、セットベースの作業には非常に適しています。ただし、エラー処理はお粗末です)
いつものように、 データをアプリサーバーに戻すと、列と行を最小限に抑えることができます。クエリが調整され、適切にインデックスが付けられていることを確認すると、どちらのシナリオにも役立ちます。
メモを再確認してください:
次に、レコードをループします
ループ ほとんどの場合、レコードを介してSQLで行うのは間違っています。セットベースの操作を作成することをお勧めします。
原則として 、私はデータベースの仕事を最小限に抑えることを好みます。「このデータを保存し、このデータをフェッチする」-ただし、サーバーでの洗練されたクエリによって多くの帯域幅を節約できるシナリオの例は常にあります。
また、考慮してください:これが計算コストが高い場合、どこかにキャッシュできますか?
正確なが必要な場合 "どちらが良いか";両方の方法でコーディングして比較します(どちらかの最初のドラフトは100%調整されていない可能性が高いことに注意してください)。ただし、一般的な使用法を考慮に入れてください。実際には、一度に5回(別々に)呼び出される場合は、次のようにシミュレートします。「これらの1つと1つ」を1つだけ比較しないでください。