簡體   English   中英

具有空值的Mysql列-空間要求是什么?

[英]Mysql column with null values - what are the space requirements?

我的桌子上有很多條目。 我需要一個帶有整數值或null的附加列。 事實是,只有很少的幾行會填充該字段。

因此,我想知道創建一個單獨的表是否更好,在該表中以1:1關系鏈接條目。

我知道一個整數項在mysql / myisam中需要4個字節。 如果我將列設置為允許空值,並且在100 000行中僅填充了100個字段,那么其余的每個空值是否仍會占用4個字節?

還是mysql足夠智能,可以在填充它的位置設置值,而只是將所有內容都視為null,而沒有設置任何內容?

這取決於創建表時提供​​的ROW_FORMAT值。

在版本5.0.3之前,默認格式設置為“ REDUNDANT”:任何定長字段將使用相同的空間,即使其值為NULL。

從5.0.3版開始,該值設置為“ COMPACT”:NULL值將永遠不會使用數據庫中的任何空間。

您可以執行ALTER TABLE以確保使用正確的格式:

ALTER TABLE ... ROW_FORMAT=COMPACT

此處有更多詳細信息: http : //dev.mysql.com/doc/refman/5.1/en/data-size.html

據我所知,一旦您將一個字段聲明為int,將為其留出4個字節。 因此,對於100,000行,您正在尋找〜400 KB的空間。

如果空間有限,那么單獨的表會更好。 另一方面,如果以性能為標准,則必須考慮查詢該字段的次數以及是否檢查該字段的存在或不存在。 無論哪種情況,都需要加入。 如果要檢查是否設置了該字段,則可以使用內部聯接,這將比單表查詢慢。 如果要檢查不存在,則需要左/右外部聯接,該聯接比內部聯接慢。

它將使用位域存儲空值,因此可能需要少於一個字節。 但是,即使這樣-誰在乎,除非您使用3.5英寸軟盤將后端存儲在;-)中

MySQL中的NULL(性能和存儲)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM