有谁知道使用VarChar(255)和VarChar(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如果您之前没有检查过,它会解释每种数据类型的存储方式以及所需的空间大小.
| 归档时间: |
|
| 查看次数: |
19687 次 |
| 最近记录: |