我存储字符串,99.5 +%少于255个字符,因此我将它们存储在VARCHAR(255)中。
问题是,其中一些可能是4kb左右。什么是存储这些的最佳方式?
INT
列DEFAULT NULL
,指针将存储在那里VARCHAR(255)
列中,例如'AAAAAAAAAAA[NUMBER]AAAAAAAAAAAA'
VARCHAR
的大小从255增加到32767 以上哪项最佳,Option #1.0
,Option #1.1
或Option #2
,表现明智?
答案 0 :(得分:1)
增加字段的大小以适合字符串的最大大小。除非需要,否则VARCHAR不会使用该空间。
VARCHAR值存储为1字节或2字节长度前缀加 数据。长度前缀表示值中的字节数。一个 如果值不超过255个字节,则列使用一个长度字节, 如果值可能需要超过255个字节,则为两个长度字节。
答案 1 :(得分:1)
MySQL Definition表示VARCHAR(N)将占用L + 1 bytes if column values require 0 – 255 bytes, L + 2 bytes if values may require more than 255 bytes
,其中L是存储字符串的字节长度。
所以我猜选项#2非常好,因为小字符串仍然会占用比32767字节更少的空间。
编辑:
还想象一下,当你真正想要查询一个字符串而不知道它是否超出长度时,1.0和1.1会引发无数问题。
答案 2 :(得分:1)
Option #2
显然是最好的。它只是在每个值的大小上添加1个字节,并且不需要在第二个表的字段中合并任何复杂的连接。