sql >> データベース >  >> RDS >> Mysql

LIMITを使用するときに行の総数を取得しますか?

    幸い、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;
    



    1. 月の最後の日を見つけるためのSQLクエリ

    2. SQLServerでプログラムによるデータベースの作成

    3. SQLクロス結合

    4. PostgreSQLで本番環境に移行するための10のヒント