有人知道使用VarChar(255)和VarChar(65536)的区别吗?
到目前为止,我知道的是:
size
我不确定的是,这些变色龙之间是否有性能上的差别。
假设我希望创建一个具有多个类型行的表。使用带有“data_type1”和“data_type2”的枚举
data_type1在varchar中的字符永远不会超过255个,data_type2中的大多数字符将超过255个。
哪个解决方案表会更好?
id (int) - autoincrement
type (enum : data_type1, data_type2)
msg (varchar(255))
data (TEXT)
当输入== data_type2时,只使用'data‘列?
或
id (int) - autoincrement
type (enum : data_type1, data_type2)
msg (varchar(65536))
使用“msg”列的是什么类型的?
实际上,在这两种解决方案上都需要类型列,用于治疗目的。
编辑:
当输入== data_type2时,存储的数据实际上永远不会超过10000字符。
编辑2:
我不想在msg和列中搜索
这是一个关于存储性能的简单问题,而不是索引或搜索.
发布于 2011-05-05 14:27:24
您提到了一些事实,我将解释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)将使用的额外的一个字节。有人可能会想“哦,但那只是一个字节,谁在乎呢”。实际上,很多人都这么做--想象一下,在一个有5000万张记录的表上有几个VARCHAR列。假设您有3个varchar列,每个列都会浪费额外的字节--即3字节*5000万~ 144兆字节的浪费空间。有趣的是,这不仅仅是浪费空间。它还有助于处理开销和使用额外的RAM时,您想要阅读的东西。谁说你的数据库中只有一个表会变大呢?
了解这些信息可能会帮助你自己决定什么是最好的使用。
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html --如果您以前没有检查它,它会解释每种数据类型是如何存储的,以及它需要多少空间。
发布于 2011-05-05 14:11:24
与任何其他字符串类型相比,使用VARCHAR更好,因为TEXT有大小限制,CHAR在磁盘上保留空间。VARCHAR只对您输入的字符使用空格。
https://stackoverflow.com/questions/5898904
复制相似问题