我做了一個測試,以確保我知道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