我做了一个测试,以确保我知道ENUM是如何工作的以及它如何处理存储空间......并获得了与预期不同的结果。MySql - 为什么ENUM需要比预期多的空间?
一个表格,其中一个字段的类型为VARCHAR(100)
,填充1,000,000行。每行有一个值是从6个字符串中的1个随机选择的,长度为100.
然后,转换为ENUM
,然后回到VARCHAR(100)
。这里是结果(数据大小)。
1行百万= 99.2 MIB,VARCHAR(100)
2.行百万= 6,835.9 KIB,枚举 ( 'blah100Characters1', 'blah100Characters2',..., 'blah100Characters6')
3.行百万99.2 MIB,VARCHAR(100)
的VARCHAR(100)
类型如预期和MySQL说明书手册中匹配报道的( “L + 1个字节,0 < = L < = 255”) 百万×100 =亿= 99.2 MIB
---编辑:好,加上一个额外的字节,但是这是不相关的讨论: o)
然而,根据ENUM的MySQL规范(“1或2字节,取决于枚举值的数量(最大值为65,535)”),有6种可能的组合,我希望有一个数据每行需要1个字节。 1,000,000 x 1 = 1,000,000 = 976.5 KiB
任何人都可以向我解释为什么转换后的表格需要6,835.9 KiB,奇怪的是,这几乎是预期的7倍多?
看起来像一些数据填充正在应用,虽然金额不是2次轮;-) – 2012-08-17 03:46:59
您正在使用哪种存储引擎?你如何计算大小? – Matthew 2012-08-17 03:48:07
存储引擎是MyISAM,我将按照phpMyAdmin中该表的“Structure”区域底部的“Space Usage”表中报告的内容进行操作。 – Rickaroo 2012-08-17 03:50:48