2014-03-06 22 views
1

我試圖估計MySQL RDBMS中表的每個記錄的真實磁盤使用所需空間。MySQL記錄磁盤使用率計算|我對嗎?

該表具有這樣的結構:

  • ID INT 4字節;
  • VARCHAR(34)34字節;
  • INT 4字節;
  • INT(5)4字節;
  • INT 4字節;
  • INT 4字節,也是一個FOREIGN KEY;

所以有5個INT字段和一個最多34個字符(即34個字節)的VARCHAR。

我有2個問題:

1)總的應該是每個記錄54個字節(帶可變VARCHAR,當然)我是正確的,當我說,或者也有一些在頭個字節在估算磁盤使用空間時,我應該考慮一下?我也用INT(5)代替CHAR(5),因爲我只需要在該字段中只存儲5位數字(我將通過應用程序來做到這一點,使用regExp和字符串長度,導致I知道INT(5)可能超過5位數的整數)。 但是,這可以考慮,例如磁盤使用空間的優化,因爲我使用的是INT(4字節)而不是CHAR(5),即5個字節,即每個記錄多1個字節?

感謝您的關注!

+0

檢查這個答案 - 有一些計算http://dba.stackexchange.com/questions/59909 /如何計算空間我需要的索引/ 59910#59910 – akuzminsky

+0

要計算確切的大小給出其他信息:1)是ID主鍵? 2)VARCHAR字段 - 什麼編碼? 3)這些字段是否可以使用NULL? – akuzminsky

+0

是ID是PRIMARY KEY AUTO_INCREMENT,VARCHAR字段的編碼是UTF-8編碼的(表的CHARSET設置爲UTF8),並且所有字段都不是NULL。如前所述,最後的INT字段也是一個FOREIGN KEY。 那麼我缺少多少開銷? – tonix

回答

0

一個記錄本身將使用在偏移

1字節中可爲空的比特

0字節中的 「額外的字節」 頭

5字節

4字節ID

6字節事務ID

7字節rollba CK指針

0-3 * 34字節中VARCHAR(34)(一個字符最多可能需要因爲UTF8的3個字節)中其它整數

FK的每個不同值

4 * 4個字節將導致二級指數中的一項記錄。它將使用

5個字節的 「額外的字節」 頭

4個字節INT爲FK值

4個字節INT主鍵

其他開銷是網頁級別:每頁 120字節(16k)在標題 頁面填充因子15/16 - 即一個頁面可能包含15K的記錄。

而最後 - 通過非葉頁面中添加空間,這應該是小反正

所以,回答的問題 - 1)是會有一定的開銷,你可以計算出使用上述信息。

2)CHAR(5)UTF8將其長度增加一個字節,所以看起來INT到reasoaanle使用

+0

如果您使用'utf8mb4_unicode_ci',則每個字符也可以有4個字節。但我認爲OP使用'utf8_general_ci' – DanFromGermany

+0

謝謝,非常有用的答案! – tonix