mysql怎么查看表占用空间大小?

上周一位客户问我如何查看数据库中的数据大小,我向他展示了这个方法。
首先需要进入存放其他数据库信息的schema数据库,使用命令USE information_schema;使用。
然后,如果要检查所有数据的大小,请使用 SQL 语句 SELECT CONCAT(ROUND(SUM(DATA_LENGTH/1 02 4 /1 02 4 ),2 ), 'MB') AS data FROM TABLES;。
如果您想减少特定数据库的大小,例如例如,如果要检查 Apoyl,请将条件更改为 WHERE table_schema = 'apoyl';。

更准确地说,例如,如果要检查 apoyl 数据库中 apoyl_test 表的大小,请使用 SELECT CONCAT(ROUND(SUM(DATA_LENGTH/1 02 4 /1 02 4 ),2 ), 'MB') AS data FROM TABLES WHERE table_schema = 'apoyl' AND table_name = 'apoyl_test';。

这个方法我以前用过,确实很实用。
我自己遇到的陷阱就是有时候忘记换行,导致命令行出现错误。
无论如何,你可以了解一下。
如果你有兴趣,可以尝试一下。
这些是我在网上找到的正确解决方案。

MySQL如何看表大小_MySQL数据库表大小查询与优化教程

唉...MySQL 表的大小...相当复杂。
2 02 2 年,我做项目时经常会为此烦恼。
想想看,如果表很大的话,查询就会很慢,而且很占空间。

检查表大小...你是对的,你可以使用information_schema.TABLES或SHOW TABLE STATUS。
当我编写脚本来检查数据时,我喜欢使用 information_schema。
这个视图……相当完整,你可以检查你想要的一切。

例如...如果你想知道某个表的具体大小...编写一些SQL代码,如下所示:
sql SELECT table_schema AS '数据库名称', table_name AS '表名', ROUND(((data_length + index_length) / 1 02 4 / 1 02 4 ), 2 ) AS '总大小 (MB)', ROUND((data_length / 1 02 4 / 1 02 4 ), 2 ) AS '数据大小(MB)', ROUND((index_length / 1 02 4 / 1 02 4 ), 2 ) AS '索引大小 (MB)', table_rows AS '行数', data_free AS '碎片空间(字节)' 来自 information_schema.TABLES WHERE table_schema = 'your_database_name' -
这应该替换为您自己的数据库名称 ORDER BY (数据长度 + 索引长度) DESC;
这个SQL……我当时写过好几次了。
关键是这些字段的含义:data_length是表数据的大小,index_length是索引的大小,table_rows是行数。
这个data_free...我忘了它是做什么用的,反正看着也无聊。

如果您只想查看一张表...使用 SHOW TABLE STATUS 会简单得多。
像这样:
sql 从 your_data_name 显示表状态 LIKE 'your_table_name';
这个……比information_schema简单,但是只能看一张表。
有时我很着急...就用这个。

那么...如果我的手表太大了该怎么办?优化它。
我……也许有点极端。
我想如果我的手表太大了,我应该想办法让它变小。
清理不必要的数据......这需要完成。
例如...您的表...保存了许多一年前的日志?必须将其删除。
你可以说:
sql 从 your_table 中删除日期 < '2 02 2 -01 -01 ';
删除后...再次运行OPTIMIZE TABLE...一些片段可能会恢复。
但是 OPTIMIZE TABLE... 将锁定表。
我过去曾多次这样做过……并在半夜被 DBA 训斥。
所以...尝试在没有人使用它的时候这样做。

还有...字段类型优化...这非常重要。
例如...您的 INT...存储从 0 到 2 5 5 的数字...您不能只使用 TINYINT 吗?节省空间。
VARCHAR也标记情况,不要盲目设置长度。
索引也是如此……任何多余的东西都应该被删除。
我是一个...做事匆忙的人...如果我可以不用食指,我不会。

分区...我印象不太深刻...反正就是一个块...这似乎适合特别大的表。
像这样按月划分的事情......看起来很尴尬。

存储引擎...我使用MyISAM...感觉空间更小...但无法处理事务。
现在......似乎每个人都在使用InnoDB。

所以...你说的... information_schema 与文件系统大小不同...我明白。
InnoDB的机制...独立表空间...共享表空间...光听就头晕了。
页面对齐...文件系统块大小...我都忘了。
什么无论如何……还是有区别的。
日志文件...它们绝对不重要。
data_free...是表中不再使用但仍占用文件的空间。
操作系统和文件系统过载......更不用说。

无论如何...MySQL表大小...还有很多事情要做。
2 02 2 年……我会觉得这很尴尬。
现在……也许更好?不知道。

如何查看 MySQL 中每个索引占用的磁盘空间大小?

这是湖。
不要相信官方提供的方法不准确、不真实。

使用 SHOW TABLE 查看整个数量列表,但无法区分各个列表。

information_schema评估,假设太随意,不要使用。
使用
pt-index-use进行分析,但它不直接计算大小,因此它不会随机使用。

mysqldump看起来像一个定义,并不是实际使用,别当真。

第三方工具或者脚本,innotop给出了一些信息,自定义脚本解析数据文件比较麻烦,所以就不做了。

启动版或MySQL 8 .0+有改进,但升级价格较高。

后面是操作前的信息。

根据自己的需要选择方法,不要死板。

mysql中创建的数据库存在哪里了