总是使用255个字符来varchar字段降低性能?

use*_*226 0 mysql database-performance

我通常使用varchar字段的最大字符,所以在大多数情况下我设置255但在列中只使用16个字符...

这会降低我的数据库的性能吗?

Mar*_*ams 5

在存储方面,VARCHAR(255)列将占用1个字节来存储实际值的长度加上存储实际值所需的字节数.

对于latin1 VARCHAR(255)列,最多256个字节.对于UTF8列,每个字符最多可占用3个字节(尽管很少),最大大小为766个字节.我们知道InnoDB中单个字节的最大索引长度(以字节为单位)是767字节,因此可能是某些人将255声明为支持的最大列长度的原因.

因此,再次,当存储该值时,它只占用实际需要的空间.

但是,如果列已建立索引,则索引会自动分配最大可能大小,以便索引中的每个节点都有足够的空间来存储任何可能的值.在搜索索引时,MySQL一次以特定字节大小的块加载节点.大节点意味着每次读取的节点更少,这意味着搜索索引需要更长的时间.

在将值存储在临时表中以进行排序时,MySQL也将使用最大大小.

因此,即使您没有使用索引,但是执行不能使用索引进行排序的查询,您也会受到性能影响.

因此,如果您的目标是性能,则将任何VARCHAR列设置为255个字符不应成为经验法则.相反,您应该使用最低要求.

可能存在边缘情况,您宁愿每天都遇到性能,因此您永远不必完全锁定表以增加列的大小,但我不认为这是常态.

一个可能的例外是如果您要加入VARCHAR两个表之间的列.MySQL说:

如果声明它们的类型和大小相同,MySQL可以更有效地使用列上的索引.

在这种情况下,您可以使用两者之间的最大大小.