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