当前位置: 首页 > 知识库问答 >
问题:

int类型所需的MySQL实际存储大小是4字节还是8字节?

李明贤
2023-03-14

我有一张结构如下的桌子

CREATE TABLE `data`(
  `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `foreign_id_1` INT NOT NULL,
  `foreign_id_2` INT NOT NULL,
  `foreign_id_3` INT NOT NULL,
  `start_dt` DATETIME NOT NULL,
  `end_dt` DATETIME,
  `duration_s` INT
) ENGINE = INNODB;

计算的1行大小为36字节:4x5+2x8。每个INT字段4字节,每个DATETIME字段8字节。

但是,当我在这个表中插入5 000 000行时,.idb表文件的实际大小是268 MB。因此,一行使用了大约56个字节:268 MB/5 000 000~56.2036

知道为什么会这样吗?INT实际上使用8个字节而不是4(8x5+2x8=56)吗?我在文件中找不到任何提到这种行为或存在的问题。

MySQL Server版本:5.7.26(x86_64)
操作系统:Windows 7 64位
存储:SSD 128GB
文件系统:NTFS

更新

@Akina和@Jacques Ramsden正确地向我指出,我已经忘记了PK尺寸的问题。因此,我为表“alter tabledataADD INDEXforeign_id_1_index(foreign_id_1);”添加了另一个每1行使用的字节数从56字节增加到71字节。添加索引之前的表文件总大小:268 MB,之后的表文件总大小:340 MB。
看来PK可以使用20个额外的字节。

如果没有更多的答案,我将在几个小时内结束这个问题

共有1个答案

仰欣悦
2023-03-14

每张桌子上都有文件吗?如果不是,您可能忘记了索引等必须由数据库建立和维护以提高效率。

更新:

当每个表都使用inonDB文件创建表时。数据文件/表空间包含数据和索引。这可以解释你的体型差异。注意,pk或fk条目越多,索引使用量就越多。

 类似资料:
  • C 中的 Integer 变量是占用 2 个字节还是 4 个字节?它所依赖的因素是什么? 大部分教材都说整型变量占用2个字节。但是当我运行一个程序,打印一个整数数组的连续地址时,它显示了4的差异。

  • mysql:我现在想做一个用户信息表,字段中有学生学号,请问学号该用int类型还是char类型? 新手

  • 问题内容: 我们需要提出一种在int输出中设置4位半字节的方法,如下所示: 这就是我写的 但是有什么错误我无法弄清楚 更新:我已经放下代码以防万一。但基本上答案很明确,上面有很多很棒的答案。 问题答案: 你非常亲密; 实际上,您可以简化代码,但要以区分大小写为代价。实际上,您需要权衡a和shift 。根本没有什么区别,并且代码更清晰,更优雅。 遮罩的想法是完全清除小节将占据结果的相同4个位置。否则

  • 问题内容: 在CSS中设置字体大小时,我应该使用百分比值()还是?您能解释一下优势吗? 问题答案: 他们的结论是: 显示的大小和以ems为单位的行高以及在正文中指定的百分比(以及Safari 2的可选警告)可在当今所有常用的浏览器中提供准确,可调整大小的文本。您可以将这种技术放入工具包中,并将其用作在CSS中调整文本大小的最佳方法,该方法可以使设计人员和读者满意。

  • (我不计算单词可寻址的机器,也不计算Alpha(字节可寻址但缺少字节加载/存储指令)。我指的是ISA本身支持的最窄的存储指令。) 在我的研究中,当回答现代x86硬件不能将一个字节存储到内存中吗?时,我发现Alpha AXP省略字节存储的原因是假设它们将被实现为真正的字节存储到缓存中,而不是包含字的RMW更新。(因此,它会使L1d缓存的ECC保护更加昂贵,因为它需要字节粒度而不是32位)。 我假设提

  • 问题内容: 我有一个用Java创建的字节数组。它代表某些文件的内容。我不知道这个数组的最大大小。它可以是不同的大小。我想将其存储在mysql中。我应该在mysql中使用哪种类型? 问题答案: 使用,, Mysql为列选择正确的类型