2

私のサイトには、テーブルの「アクティブ」列が null でない場合にユーザーを表示するページがあります。

先に進む前に、100 人のユーザーがいるとします。このクエリをページに配置すると、速度が大幅に低下しますか? 基本的に、私は自分のインデックスページにクエリを持っているので、ユーザーがアクセスしたときにクエリを実行して、テーブルからすべてのデータを取得したい...

while($r = $q->fetch(PDO::FETCH_LAZY)){
    echo '<div class="user">'.$r["user"].'</div>';
}
4

2 に答える 2

1

簡単な答えはノーです。妥当な数のユーザーに対して大幅な遅延が発生することはありません。ただし、数千人のユーザーを予測している場合は、次のように、パフォーマンスを最適化するために任意の数のプラクティスを使用する方がよい場合があります。

  • ページング:LIMITすべてのユーザーレコードへのアクセスを提供するために、クエリとさまざまなリンクで句を使用します。このように、テーブルがいくら大きくなっても、パフォーマンスは常に高いままです。

  • ユーザー名の簡単なテキスト検索フォーム。サーバーに代わってそれを行わせるのではなく、特定のユーザーに到達するためだけに数百人のユーザーを閲覧する必要があることを検討してください。そのようにする場合は、最適なパフォーマンスを確保するために、検索が適用されるフィールドにインデックスを付けることを忘れないでください。

  • クエリの基準として使用しているフィールドにインデックスを付けます。これはndefontenayでカバーされており、完全を期すために言及しています。


編集:あなたの質問に関して、あなたが望むのは、フィールドactiveがnullでないすべてのユーザーを取得することである場合、次のように行うことができます:

 SELECT * FROM User WHERE active IS NOT NULL

小さな注意:パフォーマンスの観点から、すべてのフィールドを収集するのではなく、取得するフィールドを指定することをお勧めします。たとえば、各ユーザーのユーザー名と電子メールを取得する場合は、次のように実行できます。

 SELECT username, email FROM User WHERE active IS NOT NULL
于 2012-07-10T22:02:53.793 に答える
1

PHP の質問というよりは、SQL の質問のように見えます。

クエリは次のようになります。

アクティブ = 1 のユーザーテーブルからユーザー名、フルネーム、whatever_else を選択します。

アクティブな列にインデックスを作成すると、これは非常に高速なクエリになります。

create index idx_active 
on usertable
(active desc);

インデックスを降順にして、値 1 が最初に並ぶようにしました (この例では、1 はアクティブ 0 非アクティブで、アクティブな列は整数です)。

長期的には、活動的でない人よりも活動的な人の方がはるかに少ないと思います。テーブル usertable の小さな部分を常にクエリします。

お役に立てれば。

于 2012-07-10T21:57:05.247 に答える