COUNTとCALC_FOUND_ROWSとストアドプロシージャと

 WEBアプリケーションで、ページャーにてページ分割をする場合、MySQLではLIMITを使うことになりますが、その際に全体のページ数を計算する為に、対象レコードするを取得する必要があります。この対象レコード数をMySQLSQLで実現するメジャーな方法として、以下2つの方法があると思います。

  • count
  • CALC_FOUND_ROWS

以上、それぞれ2つの方法について見てみましょう。

count

 最もオーソドックスな方法です。単純にデータ取得用のSQLをcount()に組み替えて対象レコード総数を取得します。データ取得用SQLとカウント取得用SQLの2つを実行することになります。

CALC_FOUND_ROWS

 まさに、この用途の為にあるような関数です。データ取得用SQLを実行と同時にデータ総数を取得できます。....がデータ量が多かったりすると逆に遅くなったりします。また、複数テーブルをJOINしてGROUP BYしていて非常遅いクエリーでこれをしてしまうと凄まじく遅くなったりします。