0

重複の可能性:
二重クエリなしの MySQL ページネーション?

私のウェブサイトには、ページネーションを含む検索ボックスがあります。

ページネーションを設定するには、一致の数を知る必要があるため、次の 2 つのオプションを考えました。

  1. 2 つのクエリを使用します。ページ内の X 件の一致のクエリ ( を使用limit) と、一致の総数を知るためのクエリです。
  2. 1 つのクエリを使用: すべての一致を取得すると、行数がわかり、次を使用して必要な行を取得しますarray_slice

解決策 #2 の方が優れていると思いますが、どう思いますか?

4

2 に答える 2

3

MySQL ではSQL_CALC_FOUND_ROWS、クエリに追加してから実行できSELECT FOUND_ROWS();ます。

http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows

于 2012-12-12T16:30:03.867 に答える
1

答えは、一致すると予想される行の数と、行に格納されているデータのサイズによって異なります。

ページネーションへの従来のアプローチは、SQLLIMIT句を使用して全体的な結果セットのサブセットを返すことです。(「ページ」の完全な数を表示するために) レコードの完全な数を実際に知る必要がある場合は、SELECT COUNT(primary_key_field) FROM table WHERE [search condition]その情報を取得するために も作成する必要があります。

COUNT クエリは非常に高速に実行できるはずであり、LIMIT クエリは、並べ替えに使用しているフィールドにインデックスがある限り、クエリのパフォーマンスの応答性を維持するため、通常、これにより最良の結果が得られます (常に必要なため)。注文を保証するためORDER BYに一緒に)。LIMITこれは、アプリケーションのメモリに保持する必要があるレコードが少なくなることも意味します。

単一のクエリアプローチが優れている可能性があるユースケースがいくつかあると思います (つまり、多数の潜在的な行がなく、行のデータサイズが小さい)。完全な結果セットを取得するためのメモリ使用量。

実際には、アプリでいくつかのシナリオをテストし、何が最適かを確認する必要があります。

于 2012-12-12T16:34:45.767 に答える