我有一个 MySQL 数据库,其中有一个包含 500 万条记录和多个字段的 MyISAM 表。其中 1 个字段是 BIG INT,我理解为 8 个字节,另一个是 CHAR 13,我认为每个字符一个字节。
我注意到,虽然向每个字段添加索引时,索引文件在 CHAR 13 上增加了 51MB,在 BIGINT 上增加了 81MB。
基于每个字段的字节位置,我预计 BIG INT 会明显更小,但实际上差异与我的预期相反并且更大。
这是为什么?
CREATE TABLE `msisdns_key` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`key` mediumint(6) unsigned NOT NULL DEFAULT '0',
`key2` smallint(5) unsigned NOT NULL DEFAULT '0',
`msisdn_big` bigint(20) unsigned NOT NULL,
`msisdn_bit` binary(20) NOT NULL,
`msisdn` char(13) NOT NULL,
PRIMARY KEY (`id`),
KEY `key` (`key`),
KEY `key2` (`key2`),
KEY `msisdn_bit` (`msisdn_bit`(3)),
KEY `msisdn` (`msisdn`),
KEY `msisdn_big` (`msisdn_big`)
) ENGINE=MyISAM AUTO_INCREMENT=6745305 DEFAULT CHARSET=latin1