0

DBから複数のレコードを取得することに疑問があります。

ケース1:

  • 結合を適用し、DBからすべてのレコード(選択した列)を選択し、Webサーバーでフィルター条件を実行します。

ケース2:

  • 結合を適用し、フィルター条件を適用し、DBで計算を行い、Webではデータを表示するだけで何もしません。

上記の2つの場合、どちらが推奨されますか?

私が考えているのは、

  • ケース1では、DBの作業はそれほど多くありませんが、ネットワークは多くのデータを伝送し、Webサーバーはより多くの作業を行う必要があります。
  • ケース2では、DBの作業が多くなりますが、ネットワークが運ぶレコードはケース1より少なく、Webサーバーの作業は少なくなります。

Webサーバーもスケーラブルであり、DBサーバーもスケーラブルです(私のDBサイズは50GBを超えないかもしれません)。

では、パフォーマンスを向上させるために、フィルタリングと計算をどこで行う必要がありますか。また、その理由は何ですか。

4

2 に答える 2

2

これはかなり簡潔な質問です。より具体的な例を取得するのに役立ちます。

ただし、フィルタリングによって結果セットから不要なアイテムを削除することを意味する場合、それはSQLの「where」句に最適なケースです。

データベースは、インデックス作成を利用しているため、Webサーバーよりもはるかに高速です。また、データベースがWebサーバーにストリーミングするデータが少ないため、トラフィック量が多いとI / Oが重大なボトルネックになるため、データベースの全体的なパフォーマンスが向上する可能性があります。大量のデータをWebサーバーにストリーミングしている場合、それはI/Oパフォーマンスに影響を及ぼします。

これを行うのが難しい場合があります。特に、フィルターが動的に変化する場合です。Webサーバーロジックで有効なSQLwhere句を作成するのは少し注意が必要です。たとえば、ユーザーにその場でフィルターを作成できるようにする場合などです。それでも、SQLでフィルタリングを行うことをお勧めします。

于 2012-09-14T16:15:08.387 に答える
1

RDBMSは、効率的な方法での選択とフィルタリングを目的としているため、ケース1を使用します。ネットワークを介してすべてのデータをWebサーバーに持ち込むことはしません。そこでは、フィルタリングで各レコードを参照して、フィルタリング基準を満たしているかどうかを評価する必要があります。

于 2012-09-14T16:09:05.203 に答える