我有一个 MySQL 数据库表,其中有一列类型为 varchar(386)。我选择这个字符数是因为我事先计算了最长条目的字符数。我目前有 400,000 个条目,但预计会随着时间的推移而增加。
我进行了一些测试,发现大约 390,000 个条目仅使用 60 个或更少的字符,而最后 10,000 个条目最多使用 386 个字符。
我应该将 10,000 个大条目分成一个单独的表吗?我将如何实施呢?从长远来看,这会提高我的查询速度效率吗?
VARCHAR
与表内联存储。VARCHAR
当大小合理时,速度会更快,而速度的权衡取决于您的数据和硬件,您希望用您的数据对现实场景进行基准测试。
可以存储的有效最大字节数VARCHAR
or VARBINARY
列受最大行大小的限制65,535 bytes
,在所有列之间共享。
例如,一个VARCHAR(255)
列可以容纳最大长度为 255 个字符的字符串。假设该列使用latin1字符集(每个字符一个字节),则实际需要的存储是字符串的长度(L),加上一个字节来记录字符串的长度。对于字符串'abcd'
, L
is 4
存储要求为5个字节。如果同一列被声明为使用ucs2
双字节字符集,存储要求为10个字节:'abcd'的长度为8个字节,该列需要两个字节来存储长度,因为最大长度大于255(最多510 bytes
).
对于较大的数据,请考虑使用TEXT
or BLOB
. TEXT
and BLOB
列的实现方式不同NDB
存储引擎,其中每一行TEXT
柱由两个独立的部分组成。其中之一是固定大小的(256 bytes)
,并且实际上存储在原始表中。另一个由超过的任何数据组成256 bytes
,它存储在隐藏表中。第二个表中的行始终是2,000 bytes
长的。这意味着a的大小TEXT
列是256
if size <= 256
(其中size代表行的大小);否则,尺寸为256 + size + (2000 – (size – 256) % 2000)
.
http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html
取决于您的数据库关系,如果您很少在查询中使用该字段。例如,获取附加信息。创建单独的表是不错的选择(规范化)。
NOTES : VARCHAR
与不同的是CHAR
。如果你创建VARCHAR(250)
并插入20
上面的字符然后需要5 bytes
+ L
不同与CHAR(250)
,这将需要250 bytes
+ L
对于相同的条件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)