mysql怎么查询所有表的数据量

我给大家讲一下我当时遇到的关于MySQL的缺点。

当时接手一个老项目,数据库表很多。
我想快速知道它有多大,但没有数据量,我不知道它有多大。
想象一下检查表中有多少条数据。
当时我就想,仅仅COUNT()不就够了吗?结果,数据库中的表数量惊人。
有数百张桌子。
一旦运行,CPU就会烧毁,内存就会爆炸。
那一幕,啧啧,看得人毛骨悚然。

后来我发现有一个表INFORMATION_SCHEMA.TABLES,其列为TABLE_ROWS,这是大概的行数。
我当时就想这个东西应该比COUNT()快很多。
尝试一下 SQL 语句:
sql 选择 table_schema 作为数据库名称,table_name 作为表名,table_rows 作为估计行数 来自 INFORMATION_SCHEMA.TABLES WHERE NOT TABLE_SCHEMA ('information_schema', 'mysql', 'performance_schema', 'sys') ORDER BY 数据库名,表名;
嘿嘿,真快啊!结果立刻就出来了。
当然,这只是一个猜测,尤其是对于InnoDB引擎。
它的 TABLE_ROWS 是一个估计值,并不实时准确。
然而,这种方法对于快速了解估计的大小或进行初步的容量评估确实很有用。

我记得在一个拥有数千个表和大量数据的大型工厂数据库中工作。
如果每次都需要准确的数据,那么运行需要多长时间?最终,我们总是使用这个近似值,然后根据业务特征确定哪些表包含数据。
数量可能会有较大偏差,需要特别注意。
例如,如果某些表是日志表,并且数据量增长很快,那么TABLE_ROWS可能不准确,应结合实际情况。

后面我们也会结合这个来做一些数据库监控。
例如,使用Prometheus定期捕获这些数据,然后创建图表来查看数据量的增长趋势。
如果你发现某个表的TABLE_ROWS突然暴涨,那么你的业务可能出现了问题,赶紧检查一下。

还有,在准备数据库迁移时,我用这个方法先估算一下需要多少存储空间,然后再进行规划。
保存起来才发现容量不够了,着急了。

当然,这一招并不是万能的。
如果你非常精确,比如你想对每一条数据都精确,你还是得用COUNT(),这样很慢。
但如果是快速猜测,或者只是想得到一个粗略的想法,那么 INFORMATION_SCHEMA.TABLES 的 TABLE_ROWS 是一个非常好的帮手。

总之,记住这个方法可以为你省去很多麻烦。
但您也必须意识到它的局限性,不要将其用作精确值。

mysql 如何用sql语句查询表的所有列名

查询列名和表数。

请检查数据库名a下表名b的列名。
SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME = 'b' AND TABLE_SCHEMA = 'a';
检查数据库名称 a 下的表名称 b 中的列数。
SELECT COUNT() FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'a' AND TABLE_NAME = 'b';
数据库名称为 a,表名称为 b。
将某些项目替换为 a 和 b。
实时检查时间并以数字形式查看结果。

此 SQL 仍在验证中。
你自己掂量一下吧。