mysql varchar长度影响速度_MySQL VARCHAR大小的性能影响

您必须实现使用CHAR与VARCHAR的权衡

使用CHAR字段,您分配的内容正是您所获得的.例如,无论您在字段中放置的字符如何,CHAR(15)都会分配和存储15个字节.字符串操作简单明了,因为数据字段的大小是完全可预测的.

使用VARCHAR字段,您将获得完全不同的故事.例如,VARCHAR(15)实际上动态分配最多16个字节,最多15个用于数据,至少1个额外字节用于存储数据长度.如果要存储字符串’hello’将占用6个字节,而不是5.字符串操作必须始终在所有情况下执行某种形式的长度检查.

当你做两件事时,权衡更明显:

1.存储数百万或数十亿行

2.索引CHAR或VARCHAR列

贸易#1

显然,VARCHAR具有优势,因为可变长度数据会产生较小的行,从而产生较小的物理文件.

贸易#2

由于固定字段宽度,CHAR字段需要较少的字符串操作,因此针对CHAR字段的索引查找平均比VARCHAR字段快20%.这不是我的任何猜想. MySQL Database Design and Tuning这本书在MyISAM表上表现得非常出色,以证明这一点.书中的例子做了类似下面的事情:

ALTER TABLE tblname ROW_FORMAT=FIXED;

该指令强制VARCHAR表现为CHAR.我在2007年的前一份工作中做到了这一点,拿了300GB的表,加快了索引查找速度20%,而没有改变其他任何东西.它发布了.然而,它确实产生了几乎两倍大小的表,但这简直可以追溯到权衡#1.

您可以分析存储的数据,以查看MySQL建议的列定义.只需对任何表运行以下命令:

SELECT * FROM tblname PROCEDURE ANALYSE();

这将遍历整个表,并根据其包含的数据,最小字段值,最大字段值等推荐每列的列定义.有时,您只需要使用常识来规划CHAR与VARCHAR.这是一个很好的例子:

如果要存储IP地址,则此列的掩码最多为15个字符(xxx.xxx.xxx.xxx).我会在心跳中跳到CHAR(15),因为IP地址的长度不会变化那么多,并且字符串操作的额外复杂性由一个额外的字节控制.您仍然可以针对此类列执行PROCEDURE ANALYZE().它甚至可能推荐VARCHAR.在这种情况下,我的钱仍然在CHAR over VARCHAR上.

CHAR vs VARCHAR问题只能通过适当的规划来解决.强大的力量带来了巨大的责任(陈词滥调,但却是真实的)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值