MYSQL文档说明了这一点:
“对于频繁更改的MyISAM表,应尽量避免使用所有可变长度列(VARCHAR,BLOB和TEXT)。如果表中包含一个可变长度的列,则该表使用动态行格式。请参阅第13章,存储引擎。“
我正在建造的桌子将: 第1列:自动递增INT,设置为主键 然后20列Varchar(255) 300万行
varchar列将输入文本,通常大约100个字符,但在极少数情况下,最多可输入255个字符。每次读取表也会进行更新(读取,处理数据,然后使用新信息更新表),因此表中有很多“更改”。但这是上面引用的文章引用的相同变化吗?
我被告知这是一个非“教科书”设置,但它是专为速度而设计的,并且没问题。那么,问题是上面的手动引用是否意味着我应该使用Char(255)而不是varchar来满足我的需求?
答案 0 :(得分:0)
这是文章所讨论的变化。 Char(255)应该产生更好的性能,但这将花费磁盘空间255字节 - (实际数据长度)。 此外,如果您这样做,您可能还需要在客户端代码中添加修剪。 击>
根据{{3}}
当存储CHAR值时,它们用空格填充到指定的长度。检索CHAR值时,将删除尾随空格。
除非您使用documentation。
,否则不会担心尾随空格For binary strings, all characters are significant in comparisons,
including trailing spaces:
mysql> SET NAMES binary;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT 'a ' = 'a';
+------------+
| 'a ' = 'a' |
+------------+
| 0 |
+------------+
1 row in set (0.00 sec)