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

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

我有一个具有以下结构的表

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)吗?我在文档中找不到任何提及此行为或存在的 SO 问题。

MySQL 服务器版本:5.7.26 (x86_64)

操作系统:Windows 7 64 位

存储:SSD 128GB文件系统

:NTFS

更新

@akina 和@Jacques Ramsden 正确地向我指出我忘记了 PK 大小。data所以我为表“ALTER TABLE ADD INDEX foreign_id_1_index( foreign_id_1);”添加了另一个 每 1 行使用的字节数从 56 字节增加到 71 字节。附加索引之前的表文件总大小:268 MB,之后:340 MB。

看起来 PK 可能会使用 20 个额外的字节。

如果没有更多答案,我将在几个小时内关闭问题

更新 2

从11.7 数据类型存储要求:“使用 NDB 存储引擎的每个表都需要一个主键;如果您没有定义主键,则 NDB 会创建一个“隐藏”主键。这个隐藏的主键每个消耗 31-35 个字节表记录。”

相关推荐

详细步骤怎么写 (详尽详细步骤和留意事项|闲鱼怎样被敞开专题报名)
一禾三生护发素
365bet新英体育

一禾三生护发素

08-14 👁️ 2267
光电子学
bat365在线平台官网登录

光电子学

07-29 👁️ 5851
三星S24E390HL
bat365在线平台官网登录

三星S24E390HL

08-17 👁️ 5715
懶人瘦腿法!按這4個穴位輕鬆瘦小腿!
bat365在线平台官网登录

懶人瘦腿法!按這4個穴位輕鬆瘦小腿!

08-07 👁️ 876
everfilter的详细使用流程介绍
必发365app官网

everfilter的详细使用流程介绍

07-30 👁️ 2016
电信语音包取消发什么短信退订 电信语音包取消
bat365在线平台官网登录

电信语音包取消发什么短信退订 电信语音包取消

08-16 👁️ 6186
信号处理滤波的作用是什么呢?
必发365app官网

信号处理滤波的作用是什么呢?

07-06 👁️ 5736
为什么不是所有的 AMD 处理器都有显卡?
必发365app官网

为什么不是所有的 AMD 处理器都有显卡?

08-17 👁️ 6738