SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【MySQL】テーブルのレコード件数を負荷をかけずに知りたい

問題

テーブルのレコード件数は select count(*) from table_name; するしかないですか?

大量にレコードがある場合などには厳しいのですが。

答え

information_schema を利用する手がある。

SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_ROWS 
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = '対象のデータベース名';

information_schema.TABLES の TABLE_ROWS に大体の件数が入っている。

なお、公式サイトにもあるように、InnoDBでは概算値となり、40%~50%もずれることもある。

TABLE_ROWS

行数。 MyISAM などの一部のストレージエンジンは、正確な数を格納します。 InnoDB などのほかのストレージエンジンの場合、この値は概算であり、実際の値と 40% から 50% まで異なる可能性があります。 このような場合、正確な数を取得するには SELECT COUNT(*) を使用します。

TABLE_ROWS は、INFORMATION_SCHEMA テーブル用の NULL です。

InnoDB テーブルの場合、行カウントは SQL 最適化で使用される単なる概算です。 (InnoDB テーブルがパーティション化されている場合も、これは当てはまります。)

https://dev.mysql.com/doc/refman/8.0/ja/information-schema-tables-table.html

ANALYZE TABLE や OPTIMIZE TABLE の最適化直後は大体正確な数字になっているはず。

関連するメモ

コメント