我正在尝试估计已知列范围的数据库大小。我已经搜索过但找不到任何合适的规则。
我创建了一个包含单个表的数据库,该表有 40 列。其中一列是 int 主键,其余 39 列是 LONGTEXT 类型。
我预计有 200 万条记录。
CREATE TABLE IF NOT EXISTS `TempTable` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Column1` longtext,
`Column2` longtext,
--
--
--
`Column39` longtext,
PRIMARY KEY (`Id`)
)
我该怎么做?我需要插入假数据来计算大小吗?
最佳答案
使用Data Type Storage Requirements您可以估计表格大小:
int
为 4 个字节,请注意(11)
仅表示要显示的最大位数(请参阅 this answer)。
每个字符串列的 - (L+4),L 是字符串的长度(以字节为单位)。但请注意,当您使用 Unicode (utf8) 时,并非所有字符都使用相同的字节数。
所以大小是:
R * ( 4 + 39*(L+4) )
其中 R
是记录数,L
是平均字符串大小。
采用 R=2*106 和 L=1000 字节,得出:
2*106 * ( 4 + 39 ( 1004 ) ) = 7.832 * 1010 字节
对于其他 L,大约为 72.9 GiB:
L (bytes) : 10 100 1000 10000
Table size (GiB): 1 7.5 72.9 726.7
一些进一步的说明:
- 实际大小取决于存储引擎。
- 某些引擎还支持数据压缩,例如InnoDB .
- 如果您使用 InnoDB,它会使用“页面”,因此大小是页面大小的倍数,请参阅 this answer .
- 请参阅此相关问题:How to estimate/predict data size and index size of a table in MySQL
关于mysql - 如何估计已知列范围的 MYSQL 数据库大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36793101/