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

说白了,查看MySQL表的大小有两种方法,information_schema和SHOW TABLE STATUS。
前者灵活,后者快速。

首先,最重要的是information_schema是万能的。
去年我们做了一个百万级的项目。
过滤和聚合都用得顺手,直接省去了写脚本、跑shell的功夫。
还有一点,比如有一个表data_length+index_length加起来是3 000MB,但是data_free有5 00MB。
这5 00MB是碎片,也就是说要安排表优化。
还有另一个关键细节。
innoDB表有innodb_file_per_table参数。
如果默认为ON,则表大小基本等于物理文件大小,但如果为OFF,则所有表都被压缩到一个共享文件中。
此时information_schema无法衡量单个表占用了多少磁盘空间。

一开始我以为表大小就是文件大小,后来发现是错误的。
例如,如果文件系统有页对齐,而表只占用半页,则会被算作整页,这意味着更多的空间。
等等,还有一件事。
innoDB日志文件(ib_logfile)不包含在表大小中,但加起来可能有几十GB。

提醒:使用information_schema计算的表大小和使用du命令计算的文件大小可能略有不同。
不要误以为 MySQL 会占用空间。
其实就是文件系统开销+数据碎片+日志文件的综合结果。

建议多运行OPTIMIZE TABLE,尤其是innodb_file_per_table=OFF的数据库,碎片处理太好了。

怎么查看oracle数据库数据量大小?

我记得有一次,当我在一家公司担任数据库管理员时,我遇到了一位新的项目经理。
他一脸悲伤地问我:“老张,看来我们的数据库越来越大了,怎么才能知道具体的数据量呢?”我一边翻着笔记本,一边告诉自己,这很简单,但为了让他明白,我得从简单的事情开始。

我打开数据库,写了一行SQL:“SELECT tablespace_name, sum(bytes)/1 02 4 /1 02 4 as MB FROM dba_data_files GROUP BY tablespace_name;”过了一会儿,屏幕上出现了一排数字,每个表空间的大小都清晰的显示出来。
项目经理看着他,眼睛一亮,问道:“这是数据量吗?”
我点头解释道:“是的,这是表空间的大小,以兆字节为单位,一目了然。
不过,你也应该知道每个表空间的具体数据文件在哪里。

我又写了一行SQL:“SELECT tablespace_name, file_name FROM dba_data_files;”这次,屏幕上显示了每个表空间内所有数据文件的路径。
项目经理一看,说:“哦,现在明白了,原来数据量大了,文件也多了。

我笑了笑,说:“是的,这是完全了解数据量的方法。
不过,别忘了,要执行这些查询,必须有足够的权限。

等等,我突然想到,如果数据量真的很大,我们可能要考虑提高存储和查询的效率了。
不过,今天先不说这个,下次再说。