VarChar(255)和VarChar(65536)之间的MySQL不同处理

The*_*uad 12 mysql varchar

有谁知道使用VarChar(255)和VarChar(65536)之间的区别?

这是我目前所知道的:

  • VarChar(255)只使用一个字节的大小
  • VarChar(65536)将使用两个字节的大小
  • VarChar(65536)仅在MySQL 5.0.3之后才存在
  • MySQL使用255和65536之间的不同处理(虽然不知道区别)

我不确定这些varchars之间是否有任何性能差异.

假设我想创建一个具有多种类型行的表.使用带有'data_type1'和'data_type2'的枚举

varchar中的data_type1永远不会超过255个字符data_type2在varchar中的字符数通常超过255个

哪个解决方案表会更好?

id (int) - autoincrement
type (enum : data_type1, data_type2)
msg (varchar(255))
data (TEXT)
Run Code Online (Sandbox Code Playgroud)

在type == data_type2时只使用'data'列?

要么

id (int) - autoincrement
type (enum : data_type1, data_type2)
msg (varchar(65536))
Run Code Online (Sandbox Code Playgroud)

使用'msg'列存在什么类型?

实际上,对于用于治疗目的的两种溶液都需要类型列.

编辑:

当type == data_type2时,存储的数据实际上永远不会超过10000个字符

编辑2:

我不打算在列msg和数据中搜索

这是一个关于存储性能的简单问题,而不是索引或搜索性能......

Mic*_*.V. 26

你提到了一些真实的东西,我将解释VARCHAR是如何工作的.

如果指定VARCHAR(60),则表示最多可以容纳60个字符.如果它包含较少的字符,让我们说50 - 然后MySQL使用50个字节来存储数据而不是60.

与CHAR(60)完全相反 - 无论要保存的字符串长度如何,它都会保留60个字节.

现在,VARCHAR如何工作?如果将其指定为VARCHAR(255),则表示该列将保留1个字节+字符串字节的长度.那1个字节表示字符串的长度.1个字节=您可以存储0到255个值(2到8的幂= 256).

对于大于255的VARCHAR,您需要以某种方式存储正在使用的字节数.由于1个字节最多只能存储256个不同的值(0 - 255),因此需要使用两个字节.两个16的功率= 65536,这意味着您可以存储任何大小为该大小的字符串,然后它会加上2个字节来表示字符串的长度.

因此,缩短它 - 性能差异是,如果你有VARCHAR(65536)并且你使用200个字节来存储文本 - 你浪费了VARCHAR(65536)将使用的1个额外字节.有人可能会想"哦,但这只是1个字节,谁在乎这个".实际上很多人都这样做 - 想象一下桌面上有几个VARCHAR列,这些列有5000万条记录.假设你有3个varchar列,每个浪费额外的字节 - 这是3个字节*5000万~144兆字​​节的浪费空间.有趣的是,它不仅仅是浪费空间.当您想要阅读某些内容时,它还会导致处理开销和使用额外的RAM.谁说你的数据库中只有一张表会变大?

了解这些信息可能有助于您确定最适合使用的信息.

http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html如果您之前没有检查过,它会解释每种数据类型的存储方式以及所需的空间大小.