ホームページ >データベース >mysql チュートリアル >2 つのクエリを作成せずに MySQL のページネーションを最適化するには?

2 つのクエリを作成せずに MySQL のページネーションを最適化するには?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-06 08:47:101002ブラウズ

How to Optimize MySQL Pagination Without Making Two Queries?

MySQL のページネーション: 二重クエリを使用しない最適なテクニック

ページネーションは、大規模なデータセットを管理可能なチャンクに分けて表示するための基本的なテクニックであり、多くの場合、2 つの別々の方法が必要です。 MySQL でのクエリ。 1 つのクエリは結果の合計数を取得し、別のクエリはページネーション パラメータに基づいて結果を制限します。

二重クエリ: 従来のアプローチ

伝統的に、ページネーションは次の手順:

  1. クエリを実行して、合計数をカウントします。 results:

    SELECT COUNT(*) FROM `table` WHERE `some_condition`
  2. 特定のページを表示するように結果を制限します:

    SELECT `fields` FROM `table` WHERE `some_condition` LIMIT 0, 10

二重クエリの制限

このアプローチは信頼できますが、次のような問題があります。制限事項:

  • 2 つのクエリ: 2 つの別々のデータベース呼び出しが必要であり、パフォーマンスに影響を与える可能性があります。
  • キャッシュ: カウントをキャッシュすると軽減できるパフォーマンス上の懸念がありますが、追加の要因が発生します

代替手法

二重クエリは広く使用されている手法ですが、ページネーションの唯一のオプションではありません。代替方法は次のとおりです。

SQL_CALC_FOUND_ROWS および FOUND_ROWS() を使用する

  1. SQL_CALC_FOUND_ROWS を使用してクエリを実行する句:

    SELECT `fields` FROM `table` WHERE `some_condition` ORDER BY `field_name`
  2. SELECT FOUND_ROWS() を実行して結果の総数を取得します:

    SELECT FOUND_ROWS()

の制限事項SQL_CALC_FOUND_ROWS

  • パフォーマンス: MySQL の既知のバグにより、大きなテーブルでの二重クエリよりも遅くなる可能性があります。
  • 順序: 最初に ORDER BY 句が必要ですquery.

キャッシュ

合計数をキャッシュすると、二重クエリと SQL_CALC_FOUND_ROWS 手法の両方のパフォーマンスが大幅に向上します。カウントを一時データベースまたはキャッシュに保存すると、カウント クエリを繰り返し実行することを避けることができます。

最適な手法の選択

アプリケーションに最適なページネーション手法は、アプリケーションによって異なります。データセットのサイズ、パフォーマンス要件、並べ替えまたはフィルター基準の有無など、さまざまな要因に基づいて決定します。次のガイドラインを考慮してください:

  • パフォーマンスが重要ではない小規模なデータセットの場合、シンプルで信頼性の高いオプションは二重クエリです。
  • パフォーマンスが重要な大規模なデータセットの場合は、カウントをキャッシュします。二重クエリを大幅に改善できます。
  • 並べ替えやフィルタリングを伴うページネーションの場合、SQL_CALC_FOUND_ROWS は double の効率的な代替手段です。クエリ中。

以上が2 つのクエリを作成せずに MySQL のページネーションを最適化するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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