我在MySQL中有一个很大的表,希望通过优化数据使其更小。
现在我想知道MySQL是否具有允许我通过删除某些行或列来计算要保存多少字节的功能?
是这样的:从(子查询...)中选择bytes_used(*),还是类似的东西?
我当然可以复制表并比较删除行或列后使用的存储,但这会花费很多时间。我可以迁移或删除某些数据,并在应用程序中以不同的方式构建它们,而不会破坏任何内容。
这个问题是关于评估可能的收益以及该行动方针是否值得追求。
关于使用MySQL数据计算磁盘空间的任何其他帮助也非常受欢迎。我知道您可以在phpMyAdmin中看到一个表占用了多少数据,但是我正在寻找更多。
附录:我正在查找行或列级别的数据大小,而不是整个表。
答案 0 :(得分:3)
无法基于行或列获取数据大小,但是您可以像这样获取整个表的数据:
您可以查询information_schema.TABLES
表以获取表使用的磁盘空间,例如:
SELECT *
FROM information_schema.TABLES
WHERE TABLE_NAME = `<your_table>`;
这有以下几列(根据文档here):
DATA_LENGTH :对于MyISAM,DATA_LENGTH是数据文件的长度, 以字节为单位。对于InnoDB,DATA_LENGTH是大约的内存量 为聚簇索引分配的字节数。具体来说, 聚集索引的大小(以页为单位)乘以InnoDB页面的大小。
AVG_ROW_LENGTH :平均行长。
这些将使您了解表使用了多少空间,以及如果删除某些行将大致获得多少空间。