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

MySQL - Can I query how much disk space certain rows or columns are taking up?

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

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

所以是这样的:select bytes_used(*) 来自(子查询...),或者类似这样的东西?

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

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

关于使用 MySQL 数据计算磁盘 space 的任何其他帮助也非常欢迎。我知道您可以在 phpMyAdmin 中看到 table 占用了多少数据,但我正在寻找更远的地方。

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

无法根据行或列获取数据大小,但您可以像这样获取整个 table 的数据:

可以查询information_schema.TABLEStable得到table使用的磁盘space,例如:

SELECT * 
FROM information_schema.TABLES
WHERE TABLE_NAME = `<your_table>`;

这包含以下列(根据文档 here):

DATA_LENGTH : For MyISAM, DATA_LENGTH is the length of the data file, in bytes. For InnoDB, DATA_LENGTH is the approximate amount of memory allocated for the clustered index, in bytes. Specifically, it is the clustered index size, in pages, multiplied by the InnoDB page size.

AVG_ROW_LENGTH: The average row length.

这些会让您了解 table 使用了多少 space 以及如果您删除一些行,您将大约获得多少 space。