-1

我正在尝试设计一个 mysql 数据库,但不知道如何将开销降至最低,我有 uniq 需求。其中一个字段可能长达 60kb 或短至 100 字节,我应该在该字段中使用哪种类型和长度以将开销降至最低?

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

4

3 回答 3

2

在 MySQL 中,VARCHAR紧凑地存储在磁盘上,即它只存储给定行上使用的字符串,加上一两个字节来编码该字符串的长度。数据和索引都是如此。

但是一旦VARCHAR从存储引擎加载到内存中,它就会被填充到全长。如果您声明,这会不必要地消耗大量内存VARCHAR(65535)。然后,在排序或临时表操作期间,该填充表示可能最终在磁盘上。

所以使用TEXT. 这种数据类型不会像VARCHAR这样在内存中填充,它还支持高达 64KB 的字符串。

如果您需要更长的字符串,请使用MEDIUMTEXT最大支持 16MB 的字符串。

于 2013-02-13T19:12:10.767 回答
0

使用VARCHAR

VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 和更高版本中可以指定为 0 到 65,535 之间的值。

于 2013-02-13T12:23:30.763 回答
0

其中一个字段可能长达 60kb 或短至 100 字节

听起来像BLOB/TEXT。正如Andreas 所指出的,如果您确定不需要超过 64K,您甚至可以使用 VARCHAR。

我听说如果您将最大值定义为 60k,那么行中剩余的每个未使用的空间直到 60k 都将被空间填充

如果您使用 CHAR,则可以:它存储填充。

只有少数行会使用此长度,而其余大多数行不会

这是不正确的。现代 DBMS 存储可变长度的行:只有实际需要的空间才会被实际使用。只需使用 BLOB/TEXT 或 VARCHAR 就可以了。

于 2013-02-13T19:01:25.683 回答