gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-29 00:15:04 25 4
gpt4 key购买 nike

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

这是我目前所知道的:

  • VarChar(255) 将只使用一个字节的大小
  • VarChar(65536) 将使用两个字节作为大小
  • VarChar(65536) 仅在 MySQL 5.0.3 之后存在
  • MySQL 在 255 和 65536 之间使用不同的处理方式(尽管不知道其中的区别)

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

假设我想创建一个包含多种类型行的表。使用带有“data_type1”和“data_type2”的枚举

data_type1 在 varchar 中永远不会超过 255 个字符data_type2 在 varchar 中将大部分超过 255 个字符

哪个解表会更好?

id (int) - autoincrement
type (enum : data_type1, data_type2)
msg (varchar(255))
data (TEXT)

当类型 == data_type2 时仅使用“数据”列?

id (int) - autoincrement
type (enum : data_type1, data_type2)
msg (varchar(65536))

无论存在什么类型,都使用“消息”列?

为了处理目的,两种解决方案实际上都需要类型列。

编辑:

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

编辑 2:

我不想在 msg 和 data 列中搜索

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

最佳答案

您提到了一些真实的事情,我将解释 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),因此您需要使用两个字节。 2 的 16 次方 = 65536,这意味着您可以存储不超过该大小的任何字符串,然后将 2 个字节相加来表示字符串的长度。

所以,简而言之 - 性能差异在于,如果您有 VARCHAR(65536) 并且您使用 200 个字节来存储文本 - 您正在浪费 VARCHAR(65536) 将使用的 1 个额外字节。有人可能会想“哦,但这只是 1 个字节,谁在乎呢”。很多人实际上是这样做的——想象在一个有 5000 万条记录的表上有几个 VARCHAR 列。假设您有 3 个 varchar 列,每个列都浪费了额外的字节——即 3 个字节 * 5000 万〜 144 兆字节的浪费空间。有趣的是,这不仅仅是浪费空间。当您想读取某些内容时,它还有助于处理开销和使用额外的 RAM。谁说你的数据库中只有一张表会变大?

了解这些信息可能会帮助您决定最好使用什么。

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

关于MySQL 对 VarChar(255) 和 VarChar(65536) 的不同处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5898904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com