MySQL - 我可以查询某些行或列占用了多少磁盘空间吗?

Wou*_*ter 7 mysql diskspace

我在 MySQL 中有一个巨大的表,我希望通过优化数据来缩小它。

现在我想知道MySQL是否有功能可以让我计算通过删除某些行或列可以节省多少字节?

所以像这样: select bytes_used(*) from (subquery...),或者类似的东西?

我当然可以复制表并比较删除行或列后使用的存储空间,但这会占用大量时间。我可以在应用程序中迁移或删除一些数据并以不同的方式构建,而不会破坏任何内容。

这个问题是关于评估可能的收益以及这种行动方案是否值得采取。

也非常欢迎有关使用 MySQL 数据计算磁盘空间的任何其他帮助。我知道您可以在 phpMyAdmin 中看到一个表占用了多少数据,但我正在寻找比这更进一步的内容。

附录:我正在寻找行或列级别的数据大小,而不是整个表。

Dar*_*hta 5

不可能根据行或列获取数据大小,但您可以获取整个表的数据,如下所示:

您可以查询information_schema.TABLES表来获取表使用的磁盘空间,例如:

SELECT * 
FROM information_schema.TABLES
WHERE TABLE_NAME = `<your_table>`;
Run Code Online (Sandbox Code Playgroud)

它具有以下列(根据此处的文档):

DATA_LENGTH:对于 MyISAM,DATA_LENGTH 是数据文件的长度,以字节为单位。对于 InnoDB,DATA_LENGTH 是为聚集索引分配的大致内存量(以字节为单位)。具体来说,它是聚集索引大小(以页为单位)乘以 InnoDB 页面大小。

AVG_ROW_LENGTH:平均行长度。

这些将使您了解表使用了多少空间,以及删除某些行后大约会获得多少空间。