我正在尝试设计一个mysql数据库 但不知道怎样做才能将开销降到最低,我有unq需要。 其中一个字段可能长达60kb或短为100字节,我应该在此字段中使用哪种类型和长度来将开销降至最低?
我听说如果你将最大值定义为60k,那么行中剩下的每个未使用的空间都会被空间填充,你知道这可能会导致不必要的开销,只有很少的原始数据会使用这个长度虽然其余大部分行都没有,你有什么建议?
答案 0 :(得分:2)
在MySQL中,VARCHAR
紧凑地存储在磁盘上,即它只存储给定行上使用的字符串,加上一个或两个字节来编码该字符串的长度。对于数据和索引都是如此。
但是,一旦将VARCHAR
从存储引擎加载到内存中,它就会被填充到其全长。如果您声明VARCHAR(65535)
,这会不必要地消耗大量内存。然后,在排序或临时表操作期间,该填充表示可能会在磁盘上结束。
因此请使用TEXT
。此数据类型不会像VARCHAR
那样在内存中填充,并且它还支持最大64KB的字符串。
如果您需要更长的字符串,请使用支持最多16MB的MEDIUMTEXT
。
答案 1 :(得分:0)
使用VARCHAR。
VARCHAR列中的值是可变长度字符串。长度可以 在MySQL 5.0.3之前指定为0到255之间的值,0到 5.0.3及更高版本中的65,535。
答案 2 :(得分:0)
其中一个字段可能长达60kb或短为100字节
听起来像BLOB/TEXT。如Andreas has pointed out,如果您确定不需要超过64K,甚至可以使用VARCHAR。
我听说如果你把最大值定义为60k,那么行中剩下的每个未使用的空间都会被空间填充
如果你使用CHAR,则是:它存储填充。
只有少数行会使用这个长度,而其余大部分行都不会
这是不正确的。现代DBMS存储可变长度行:实际只需要实际需要的空间。只需使用BLOB / TEXT或VARCHAR就可以了。