需要MySQL DB Design的帮助(最小化开销)

时间:2013-02-13 12:18:35

标签: mysql database-design

我正在尝试设计一个mysql数据库 但不知道怎样做才能将开销降到最低,我有unq需要。 其中一个字段可能长达60kb或短为100字节,我应该在此字段中使用哪种类型和长度来将开销降至最低?

我听说如果你将最大值定义为60k,那么行中剩下的每个未使用的空间都会被空间填充,你知道这可能会导致不必要的开销,只有很少的原始数据会使用这个长度虽然其余大部分行都没有,你有什么建议?

3 个答案:

答案 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就可以了。