Funny thing我发现了abount mysql。 MySQL有一个3字节的数字类型 - MEDIUMINT。它的范围从-8388608到8388607.我觉得很奇怪。选择数字类型的大小以获得更好的性能,我认为数据应该与机器字或双字对齐。如果我们需要一些数值范围的限制规则,它必须是相对于数据类型的外部。例如:
CREATE TABLE ... (
id INT RANGE(0, 500) PRIMARY KEY
)
那么,有谁知道为什么3个字节?有什么理由吗?
答案 0 :(得分:9)
原因是如果你有一个3字节范围内的数字,你不会通过使用4个字节存储它来浪费空间。
当你有200亿行时,这很重要。
答案 1 :(得分:2)
您提到的对齐问题主要适用于RAM中的数据。没有什么能迫使MySQL在处理它时使用3个字节来存储该类型。
尽管如此,这可能在使用磁盘缓存方面有一个小优势。
答案 2 :(得分:2)
我们经常使用tinyint
,smallint
和mediumint
作为非常显着的空间节省。请记住,它使您的索引更小。
当您有非常小的连接表时,此效果会被放大,例如:
id1 smallint unsigned not null,
id2 mediumint unsigned not null,
primary key (id1, id2)
然后你有数亿甚至数十亿的记录。