MySQL-MYSQL Innodb CHAR 和 VARCHAR比较
MYSQL Innodb中 char 真的比 varchar 要快吗?做了下1亿条数据测试,好像并没有多少差别,请问是否有什么先决条件。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
MYSQL Innodb中 char 真的比 varchar 要快吗?做了下1亿条数据测试,好像并没有多少差别,请问是否有什么先决条件。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
关于数据库Varchar字段类型长度设计问题
这个问题不是绝对的,Innodb推荐是使用Varchar类型,之所以会这样是要涉及到Innodb存储引擎的存储表空间,因为Innodb的索引和数据是存在同一个表空间里的,因为在操作数据里,其实是将一部分数据载入内存或者是Innodb buffer pool,这时候,由于VarChar是变长字符,所以它所占的内存或者是buffer就相对就比较小,所以速度就比较快,CHAR比VARCHAR快的根本原因是站在CPU的角度来说的,但性能是综合各种因素后的最终结果,当Innodb buffer pool小于表大小时,"磁盘IO"成为了性能的关键因素,而VARCHAR更短,因此性能反而比CHAR高。
varchar一般会用更多的内存,因为MySQL通常会分配固定大小的内存块来保存值。这对排序或使用基于内存的临时表尤其不好。同样的事情也会发生在使用文件排序或者基于磁盘的临时表的时候。
推理一下,char的偏移量的固定不变的,而在varchar中每行的数据长度大小不一,就可能导致更多的内存开销,我想主要还是你没有产生碎片吧,可以试试在频繁更新的场景下,尤其是字段由小变大的情况下,这种效率问题应该比较突出
另外.char的优势应该在查询,修改拥有较大优势
我所了解的是`
InnoDB以固定长度格式存储固定长度字符列
如 char(10), InnoDB 从varchar列截短跟踪空间,
MySQL可以内部地把CHAR列转换为VARCHAR列。
所以我认为没有啥区别
确实是,如果是多字节字符,如果utf8,在innodb 中,char 的实现是 varchar 的。
char(N)表示定长的字符串,varchar(N) 保存变长. char, N 是0 ~ 255,而vchar是0 ~ 65535. N代表字符长度,而非字节长度,字节长度与你的字符集有关,如utf8,char(10)最多可能是30个字节。The CHAR and VARCHAR Types
char(N), 数据库会进行填充,如char(255),只存了10个字符,它会填充245个,读取时里进行填充字符删除。
Vchar 存储时需要1 - 2字节来存放肖前实际字符串的自己长度。所以对单字节的latin1,varchar(10) 最大占用是11 byte,而char(10)是10 byte.
数据库的索引是基于可能的字节数来分配空间来存放索引,因此如果用varchar(255)但实际最多只存放了200个字符,那索引比char(200)要更大的空间。另外,如进行sorting,也会有问题,预先分配的空间是以最大的长度来估计。