【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 の最適化直後は大体正確な数字になっているはず。
コメント