• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

在MySQL中查找表大小

MySQL SQL 彭东稳 8年前 (2016-04-28) 26474次浏览 已收录 0个评论

在 MySQL 中可以通过在 information_schema 数据库中查询有关数据库的很多元数据信息,如果想知道 MySQL 数据库中每个库或每个表占用的空间、以及表索引占用的空间和表记录的行数的话,可以通过其中的一个 TABLES 表进行查看,TABLES 表中的数据来查看当前某个库的大小,某个表的大小,以及某个表的索引大小和行记录等等。

这个表主要字段分别是:

字段 注释
TABLE_SCHEMA 数据库名
TABLE_NAME 表名
ENGINE 所使用的存储引擎
ROW_FORMAT 行格式
TABLE_ROWS 表记录数
DATA_LENGTH 表数据大小
INDEX_LENGTH 表索引大小
DATA_FREE 表碎片

其他字段请参考 MySQL 的手册,我们只需要了解这几个就足够了。

需要知道的是 MySQL 并没有真正的实时维护 DATA_LENGTH 和 INDEX_LENGTH 的值,而是定期刷新它们,而且是不规则地刷新它们,所以这部分数据的增长变化是没有规律的。但对于 TABLE_ROWS,DATA_FREE 则是有规律的更新,似乎是每次有 10% 的行更改时,就更新一次统计信息。

1)查看单个数据库的数据大小

2)查看单个数据库的索引大小

3)查看单个数据库的数据加索引大小(等于库占用空间的大小)

示例如下,数据加索引大小:

得到的结果是以字节为单位,除 1024 为 K,除 1048576 为 M,如下:

4)查看单个表的数据大小

5)查看单个表的索引大小

6)查看单个表的数据加索引大小(等于表占用空间的大小)

示例如下,单个表数据加索引大小:

7)查看单个表的行数

8)查看表使用的存储引擎

查看库中所有表的大小并排序

其实也可以使用 show 语法来查看表详细信息。

查出来的跟 information_schema.TABLES 表中的信息一致。

另外,我们可以通过 information_schema.innodb_sys_tablespaces 查看表空间信息以查看实际文件大小。与 DATA_LENGTH 和 INDEX_LENGTH 不同,innodb_sys_tablespaces 是实时更新,无需特殊配置。

使用这个表的好处是,它还处理“InnoDB页压缩”,正确显示了 file_size(磁盘上的逻辑文件大小)和 allocated_size(为此文件分配的空间,并且可以显着缩小)之间的区别。

最后,让我们看一下不同的 InnoDB 压缩方式如何影响 information_schema 中提供的信息。

如果你使用旧的 InnoDB 压缩(InnoDB表压缩),你将看到 data_length 和 index_length 中显示的压缩数据大小作为结果。例如,avg_row_length 将远低于你的预期。

如果在 MySQL 5.7 中使用新的 InnoDB 压缩(InnoDB页压缩),你将看到文件大小相对应的值,而不是如 information_schema 中所示的分配大小。

<参考>

https://www.percona.com/blog/2016/01/26/finding_mysql_table_size_on_disk/


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!