ホームページ  >  記事  >  データベース  >  SQL_CALC_FOUND_ROWS を使用してページ分割された MySQL クエリの行数を効率的に取得する方法

SQL_CALC_FOUND_ROWS を使用してページ分割された MySQL クエリの行数を効率的に取得する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-11-01 03:58:28344ブラウズ

How to Efficiently Get Row Count in Paginated MySQL Queries with SQL_CALC_FOUND_ROWS?

LIMIT にもかかわらず SQL_CALC_FOUND_ROWS を使用して行数を取得する

ページ分割 (「LIMIT」句) を使用して複雑な MySQL クエリを実行する場合、合計行数を取得するのは困難な場合があります。合計数の LIMIT 句を使用せずにクエリを 2 回実行すると、非効率になる可能性があります。

幸いなことに、MySQL には SQL_CALC_FOUND_ROWS オプションが導入されており、LIMIT 句を使用しながら合計行数を計算できます。その仕組みは次のとおりです:

  1. SQL_CALC_FOUND_ROWS をメイン クエリに追加します:
    SELECT 句の直後に、SQL_CALC_FOUND_ROWS をメイン クエリに追加します。
  2. 2 番目のクエリを実行して行数を取得します:
    FOUND_ROWS() 関数を使用して 2 番目のクエリを実行し、合計行数を取得します。

クエリの例:

<code class="sql">-- Main query with SQL_CALC_FOUND_ROWS
SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;

-- Second query to get row count
SELECT FOUND_ROWS();</code>

制限事項と代替案:

SQL_CALC_FOUND_ROWS は便利なソリューションを提供しますが、その使用法は MySQL 8.0.17 では非推奨であることに注意してください。ほとんどの場合、クエリを 2 回実行した方がまだ高速です。

代わりに、MySQL 8.0 では行数を取得するための次の最適化されたオプションが導入されています:

  • ROW_COUNT()関数: 前のクエリによって返された行数を返します。
  • COUNT() 関数: COUNT(*) をサブクエリとして使用して、行数を計算します。

これらの手法を利用することで、開発者は速度やパフォーマンスを犠牲にすることなく、ページ分割された MySQL クエリの合計行数を効率的に取得できます。

以上がSQL_CALC_FOUND_ROWS を使用してページ分割された MySQL クエリの行数を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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