ホームページ >データベース >mysql チュートリアル >MySQL でページネーションの合計結果を効率的に取得するにはどうすればよいですか?

MySQL でページネーションの合計結果を効率的に取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-23 21:29:10189ブラウズ

How Can I Efficiently Retrieve Total Results for Pagination in MySQL?

MySQL を使用したページネーションの合計結果の効率的な取得

ページネーションは、大規模なデータセットのユーザー ナビゲーションを強化する重要な機能です。 MySQL では、これは多くの場合、OFFSET 句と LIMIT 句を使用して結果の特定のサブセットをフェッチすることで実現されます。ただし、必要なページの合計数を決定するには、ページ分割パラメータを適用する前に結果の合計数を知る必要があります。

従来、開発者はクエリを 2 回実行します。1 回目は LIMIT を使用してサブセットを取得し、もう 1 回目はクエリを実行します。結果をカウントするのに制限はありません。このアプローチでは、不必要なリソースの消費が発生する可能性があります。幸いなことに、SQL_CALC_FOUND_ROWS ヒントを使用したより効率的な解決策があります:

SQL_CALC_FOUND_ROWS の使用:

プロセスを最適化するには、SQL_CALC_FOUND_ROWS を元の SQL クエリに追加します:

SELECT *
FROM table_name
WHERE category_id = 1
ORDER BY id
LIMIT 10 OFFSET 20

これは次のことを示しますMySQL は、OFFSET パラメータと LIMIT パラメータを適用する前に、一致する行の合計数を計算します。

合計数の取得:

クエリの実行後、合計を取得できます。次の SQL ステートメントを使用して一致する行の数を計算します:

SELECT FOUND_ROWS()

計算ページ:

合計数と LIMIT パラメーターがわかっているので、合計ページ数を簡単に計算できます:

$totalPages = ceil($totalCount / $limit);

コード例:

CodeIgniter では、$query でクエリがすでに定義されていると仮定して、次のコード スニペットを使用できます。変数:

$query->sql_calc_found_rows();
$result = $query->get();

$totalPages = ceil($this->db->query('SELECT FOUND_ROWS()')->row('FOUND_ROWS()') / $limit);

SQL_CALC_FOUND_ROWS を利用すると、追加のクエリを実行せずに結果の合計数を効率的に取得でき、貴重な計算リソースを節約し、ページネーション機能のパフォーマンスを向上させることができます。

以上がMySQL でページネーションの合計結果を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。