在常规 int 的 mysql 表中使用 smallint 数据类型实际上会提高内存使用率吗?无论如何,硬件不会为所有数据分配一个完整的 64 位字长吗?如果它没有分配一个完整的字,那么我们会不会因为必须从分配在内存中的 64 位字中解析出多个 smallint 或 tinyint 而导致性能下降?
基本上,假设我们知道存储在Status
列中的值的范围永远不会超过 smallint 的最大/最小范围,那么使用下表是否有任何设计/内存/性能优势?任何见解将不胜感激:
create table `TestTableWithSmallInt` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`Status` smallint(11) DEFAULT 0,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table `TestTableWithInt` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`Status` int(11) DEFAULT 0,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;