Mysql
NULL DATE 是否使用與值一樣多的儲存空間?
我需要儲存一個可能有也可能沒有日期的 DATETIME 值。
我的選擇是:
starts DATETIME 0000-00-00 12:38:06 * ``` | starts_date DATE | starts_time TIME | |------------------|------------------| | NULL | 12:38:06 |
如果一個
NULL
DATE
值佔用 0 儲存空間,我可能會在大多數記錄上保存幾個字節(full 為 8 個DATETIME
字節,just 為 3 個字節TIME
)。但是,以下頁面說NULL
s 仍然佔用與固定長度列上的實際值一樣多的儲存空間,例如CHAR
vs.VARCHAR
。是否DATE
也考慮固定長度?
- NULL Decimal(19,4) 或 DATETIME 的字節大小(雖然這是針對 SQL Server)
- 空列值是否與填充列值佔用相同的儲存空間
如果您使用的是 MyISAM,請不要。
如果你發現
DATETIME
是 8 個字節,那麼你使用的是舊版本的 MySQL;現在只需要 5 個字節。升級。“Fixed”對 MyISAM 稍微重要;對於 InnoDB 來說很少重要。所以不用擔心。特別是,除非您有十億行,否則不要擔心。
對於 InnoDB 表
Helpful Notes About NULLs:
對於第三行,我在 FIELD2 和 FIELD3 中插入了 NULL。因此,在欄位起始偏移中,這些欄位的最高位是打開的(值是 94 十六進制,94 十六進制,而不是 14 十六進制,14 十六進制)。並且行更短,因為 NULL不佔用空間。
見https://dev.mysql.com/doc/internals/en/innodb-field-contents.html
對於 MyISAM 表
您至少需要一些空間來放置 thge 標頭,但它應該非常小
查看確切的https://dev.mysql.com/doc/internals/en/myisam-introduction.html