1

単純化されたシナリオ:

  1. 約100,000行のテーブルがあります。
  2. Web ページに表示するには、特定の基準に基づいて約 300 ~ 400 行を選択する必要があります。

上記のシナリオを考慮して、以下のアプローチのどれをお勧めしますか?

アプローチ 1 : データベース クエリを 1 つだけ使用して、テーブル全体を 100,000 行の 1 つの大きな配列に選択します。ループを使用して、配列から必要な 300 ~ 400 行を選択し、その 1 つをフロントエンドに渡します。クエリは 1 つだけなので、データベース サーバーの負荷は最小限です。100,000 の配列を格納して検索する必要があるため、PHP にさらに負荷がかかります。

アプローチ 2 : ループを使用して、PHP は必要なデータの行ごとに新しいクエリを生成します。すべてのデータを収集するには、300 ~ 400 の独立したクエリが必要です。サーバーの負荷が高くなります。アプローチ 1 と比較して、PHP の負荷が少なくなります。

ご意見・ご感想お待ちしております!

4

3 に答える 3

2

MySQL rdbms の場合、100,000 行は少量です。

db サーバーの微調整を行ったほうがよいでしょう。なので、1も2もお勧めしません。

ただ:

SELECT * FROM `your_table` WHERE `any_field` = 'YOUR CRITERIA' LIMIT 300;

データが 1,000,000 行を超えると、強力なインデックスの最適化について考える必要があり、複雑な選択のためのストアド プロシージャを作成する必要があるかもしれません。いずれにせよ、PHP の作業ではないことを保証します。

于 2013-02-02T08:05:34.230 に答える
0

あなたの質問がパフォーマンスの見通しから尋ねるように、あなたの両方のアプローチはいくらかのリソースを消費するでしょう。approach 1各行のクエリ、つまり300〜400のクエリを生成すると、データベースへのクエリが何度も行われないため、この場合でも問題はありません。巨大なプロジェクト設計に関しては、データベースは常にボトルネックになります。

正直なところ、どちらのアプローチも良くありません。優れたデータベース設計とクエリ選択を行うことをお勧めします。あなたが達成しようとしていることは、適切なクエリによって行うことができます。

于 2013-02-02T08:07:32.307 に答える
0

PHPを使用してデータをループすることは、実際には悪い考えです。結局のところ、データベースはクエリを実行するように設計されています。PHPはすべてのレコードをループする必要があり、処理を高速化するためにインデックスを使用しません。これは、データベースの「テーブルスキャン」とほぼ同等です。

データベースのパフォーマンスを最大限に引き出すには、適切な設計を行い、(たとえば)適切な列にインデックスを作成することが重要です。

また、使用するRDBMSをまだ決定していない場合は、使用状況に応じて、パフォーマンスの向上に役立つより高度なオプションを備えたデータベースがあります(たとえば、PostgreSQLは地理情報をサポートしています)。

Peaseは、実際のデータ(保存されるデータの種類、フィールドの種類)と、仮想ではなく実際の回答を提供できるようにするために実行する必要のあるクエリ/フィルターの種類のサンプルを提供します。

于 2013-02-02T08:18:38.730 に答える