use*_*226 0 mysql database-performance
我通常使用varchar字段的最大字符,所以在大多数情况下我设置255但在列中只使用16个字符...
这会降低我的数据库的性能吗?
在存储方面,VARCHAR(255)列将占用1个字节来存储实际值的长度加上存储实际值所需的字节数.
对于latin1 VARCHAR(255)列,最多256个字节.对于UTF8列,每个字符最多可占用3个字节(尽管很少),最大大小为766个字节.我们知道InnoDB中单个字节的最大索引长度(以字节为单位)是767字节,因此可能是某些人将255声明为支持的最大列长度的原因.
因此,再次,当存储该值时,它只占用实际需要的空间.
但是,如果列已建立索引,则索引会自动分配最大可能大小,以便索引中的每个节点都有足够的空间来存储任何可能的值.在搜索索引时,MySQL一次以特定字节大小的块加载节点.大节点意味着每次读取的节点更少,这意味着搜索索引需要更长的时间.
在将值存储在临时表中以进行排序时,MySQL也将使用最大大小.
因此,即使您没有使用索引,但是执行不能使用索引进行排序的查询,您也会受到性能影响.
因此,如果您的目标是性能,则将任何VARCHAR列设置为255个字符不应成为经验法则.相反,您应该使用最低要求.
可能存在边缘情况,您宁愿每天都遇到性能,因此您永远不必完全锁定表以增加列的大小,但我不认为这是常态.
一个可能的例外是如果您要加入VARCHAR两个表之间的列.MySQL说:
如果声明它们的类型和大小相同,MySQL可以更有效地使用列上的索引.
在这种情况下,您可以使用两者之间的最大大小.
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |