MySQL-MYSQL Innodb CHAR 和 VARCHAR比较

MySQL-MYSQL Innodb CHAR 和 VARCHAR比较

清晨说ぺ晚安 发布于 2017-02-20 字数 114 浏览 1361 回复 7

MYSQL Innodb中 char 真的比 varchar 要快吗?做了下1亿条数据测试,好像并没有多少差别,请问是否有什么先决条件。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

归属感 2017-09-15 6 楼

这个问题不是绝对的,Innodb推荐是使用Varchar类型,之所以会这样是要涉及到Innodb存储引擎的存储表空间,因为Innodb的索引和数据是存在同一个表空间里的,因为在操作数据里,其实是将一部分数据载入内存或者是Innodb buffer pool,这时候,由于VarChar是变长字符,所以它所占的内存或者是buffer就相对就比较小,所以速度就比较快,CHAR比VARCHAR快的根本原因是站在CPU的角度来说的,但性能是综合各种因素后的最终结果,当Innodb buffer pool小于表大小时,"磁盘IO"成为了性能的关键因素,而VARCHAR更短,因此性能反而比CHAR高。

归属感 2017-08-10 5 楼

varchar一般会用更多的内存,因为MySQL通常会分配固定大小的内存块来保存值。这对排序或使用基于内存的临时表尤其不好。同样的事情也会发生在使用文件排序或者基于磁盘的临时表的时候。

想挽留 2017-07-23 4 楼

推理一下,char的偏移量的固定不变的,而在varchar中每行的数据长度大小不一,就可能导致更多的内存开销,我想主要还是你没有产生碎片吧,可以试试在频繁更新的场景下,尤其是字段由小变大的情况下,这种效率问题应该比较突出

另外.char的优势应该在查询,修改拥有较大优势

灵芸 2017-05-19 3 楼

我所了解的是`
InnoDB以固定长度格式存储固定长度字符列
如 char(10), InnoDB 从varchar列截短跟踪空间,
MySQL可以内部地把CHAR列转换为VARCHAR列。
所以我认为没有啥区别

瑾兮 2017-03-24 2 楼

确实是,如果是多字节字符,如果utf8,在innodb 中,char 的实现是 varchar 的。

清晨说ぺ晚安 2017-03-23 1 楼

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,也会有问题,预先分配的空间是以最大的长度来估计。