mysql - 如何估计已知列范围的 MYSQL 数据库大小

标签 mysql

我正在尝试估计已知列范围的数据库大小。我已经搜索过但找不到任何合适的规则。

我创建了一个包含单个表的数据库,该表有 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

一些进一步的说明:

关于mysql - 如何估计已知列范围的 MYSQL 数据库大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36793101/

相关文章:

php - 更新时在数据库中保留值

Android 每 2 小时以编程方式将 GPS 发送到 MySql 数据库

python - 执行许多插入重复键更新错误: Not all parameters were used

php - Laravel如何获取两个结果值的平均值

java - Solr ; "rookie"问题

Python raw_input 故障并返回 -bash : line 1: <INPUT>: command not found

mysql - 使用 Mariaex.Result 结构中的字段

javascript - 如何将 mysql 日期转换为 var obj [新日期?

mysql - GROUP BY 和 COUNT 或 SUM 如何在 SQL 查询中协同工作

带有 COUNT ON LEFT JOIN 的 MySQL 查询