幸い、MySQL 4.0.0以降、SQL_CALC_FOUND_ROWS
を使用できます。 LIMIT
を無視して行の総数をカウントするようにMySQLに指示するクエリのオプション 句。行数を取得するには、2番目のクエリを実行する必要がありますが、これは単純なクエリであり、データを取得したクエリほど複雑ではありません。使用法は非常に単純です。メインクエリで、SQL_CALC_FOUND_ROWS
を追加する必要があります SELECT
の直後のオプション 2番目のクエリでは、FOUND_ROWS()
を使用する必要があります 行の総数を取得する関数。クエリは次のようになります:
SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;
SELECT FOUND_ROWS();
唯一の制限は、SQL_CALC_FOUND_ROWS
のため、最初のクエリの直後に2番目のクエリを呼び出す必要があることです。 行数をどこにも保存しません。このソリューションでも2つのクエリが必要ですが、メインクエリを1回だけ実行するため、はるかに高速です。 SQL_CALC_FOUND_ROWSおよびFOUND_ROWS()
MySQLドキュメントで。
編集: ほとんどの場合、クエリを2回実行すると、実際にはSQL_CALC_FOUND_ROWS
よりも高速であることに注意してください。 。 こちら
を参照してください。
編集2019:
SQL_CALC_FOUND_ROWSクエリ修飾子とそれに付随するFOUND_ROWS()関数は、MySQL 8.0.17で非推奨になり、将来のMySQLバージョンで削除される予定です。
https://dev.mysql.com /doc/refman/8.0/en/information-functions.html#function_found-rows
COUNT
を使用することをお勧めします 代わりに
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;