欢迎大家来到IT世界,在知识的湖畔探索吧!
文章目录
- 前言
- 1.char和varchar的字符比较:
- 2.存数据的区别:
- 3.取数据的区别:
- 4.测试性能比较:
- 结论:
前言
现在mysql依然是主流的关系型数据库使用首选,实际开发过程当中我们可能很少去考虑两者的区别,一般都是设置的varchar,一般也很少出问题,那他们两者的使用区别到底大不大呢?本篇文章做个梳理总结,希望喜欢的朋友参与讨论,转载。
1.char和varchar的字符比较:
因为mysql字符集设置的不同的原因,所以字符占用多大字节会因为字符集设置有区别,char最大一般是255,varchar如果是utf8mb4字符集则最大为16383,如果是utf8则为:21845,这个确实会变化(mysql一行的最大字节数为65535),有可能也会随着mysql的版本产生变化。需要注意的是:char和varchar设置的数据大小存储为字符数,而不是字节数。
2.存数据的区别:
|
类型 |
特点 |
备注 |
|
char |
定长 |
如果小于定义的长度,会补空格 |
|
vchar |
变长 |
不会补空格 |
3.取数据的区别:
|
类型 |
特点 |
备注 |
|
char |
trim()去空格 |
|
|
vchar |
保留空格 |
注意:对比数据的时候不会考虑尾部的空格
4.测试性能比较:
|
100万数据样本 |
无索引 |
有索引 |
创建索引耗时 |
|
c8=char(8) |
312.0ms |
0.271ms |
2439ms |
|
s8=varchar(8) |
334.3ms |
0.2354ms |
2442ms |
|
i8=(bigint) |
276.95ms |
0.2189ms |
1645ms |
|
c4=char(4) |
354.95ms |
0.303ms |
2296ms |
|
s4=varchar(4) |
340.45ms |
0.3094ms |
2303ms |
|
i4=int(4) |
291.1ms |
0.25ms |
1403ms |
结论:
无索引:全表扫描不会因为数据较小就变快,而是整体速度相同,int/bigint作为原生类型稍快12%。
有索引:char与varchar性能差不多,int速度稍快18%
在数据存储、读写方面,整数与等长字符串相同,varchar额外多了一个字节所以性能可能会些许影响(1/n)。
在数据运算、对比方面,整数得益于原生支持,因此会比字符串稍快一丁点。
若采用索引,所谓整数、字符串的性能差距更是微乎其微。
在实际开发中,许多开发者经常使用char(1)、char(4)这样的字符串表示类型枚举,这种做法在存储空间、运算性能、可读性、可维护性、可扩展性方面,远胜于int、enum这种数据类型。
我的总结是当确定长度的时候能使用char则使用,如果确实不是100%确定,那么使用varchar则更好,效率影响不是很大。感兴趣的朋友可以进行关注头条号留言讨论,欢迎点赞,转赞,赞赏。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/117591.html