MySQL如何统计大表数据量

MySQL统计某个表的数据量可以通过

select count(*) from t_table;

来获取,但是随着我们的表t_table数据增长,这个SQL的查询时间也会越来越慢。

当t_table表数据量达到一定量级后(俗称大表),我们再通过这个SQL来统计大表数据量就不合适了。
1是这个SQL会执行很久很久形成慢SQL,影响服务器性能。
2是即便不考虑性能问题,大部分大表都是生产数据库,我们只能通过DMS之类的数据库管理平台去执行查询语句,而DMS平台一般都对SQL有最大执行时间限制,超过时间就自动kill掉这次查询,导致我们还是获取不到大表的实际数据量。
3是对于大表来说,我们需要了解的可能只是这个大表的具体数据量级(几百万还是几千万还是几个亿),而不需要非常精准的数据。

所以我们可以通过查询 information_schema 的形式来获取某个表的预估数据量

SELECT
    table_name,
    table_rows
FROM
    information_schema.TABLES
WHERE
    table_schema = '你的数据库名'
    AND table_name = '你的表名';

他的工作原理是:
MySQL的存储引擎(InnoDB)会通过采样部分数据页来对整个表的数据量进行估算,并定期更新这个数值,所以他只是个预估值而不是准确值。他的优缺点及适用场景如下:

优点:
速度极快:查询元数据表,几乎瞬间返回结果。
无性能压力:不会扫描你的大表,对线上服务无任何影响。

缺点:
不精确:这是一个估算值,可能会有 10% 到 50% 甚至更高的误差,尤其是在数据频繁增删改的表上。
可能过时:如果表刚进行了大量数据变更,这个估算值可能不会立即更新。

适用场景:
监控仪表盘:需要快速展示各表大致数据量级。
容量规划:评估数据库增长趋势。
快速判断:快速确认一张表是否是“大表”。


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍