服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|

对比MySQL中int、char以及varchar的性能

2019-06-20 14:36laozhang Mysql

在本篇文章中我们给大家分享了关于MySQL中int、char以及varchar的性能对比的相关内容,有兴趣的朋友们学习下。

网络上有许多似是而非的“谣言”,当然都不是恶意,绝大部分都是开发者不愿意自己主动研究,反而轻信其他人的信口之言。

关于数据库的谣言也有不少,比如“int性能比char高很多”。

我最近针对int、long、char、varchar进行了一次性能测试,发现它们其实并没有太大的性能差距:

备注:c8=char(8), s8=varchar(8), i8=(bigint), c4=char(4), s4=varchar(4), i4=char(4)

100w行无索引情况下查询: 

执行[c8查询]20次, 平均耗时312.0ms 
执行[s8查询]20次, 平均耗时334.3ms 
执行[i8查询]20次, 平均耗时276.95ms 
执行[c4查询]20次, 平均耗时354.95ms 
执行[s4查询]20次, 平均耗时340.45ms 
执行[i4查询]20次, 平均耗时291.1ms

创建索引: 

c8索引耗时2439ms 
s8索引耗时2442ms 
i8索引耗时1645ms 
c4索引耗时2296ms 
s4索引耗时2303ms 
i4索引耗时1403ms

有索引情况下查询: 

执行[c8查询]10000次, 平均耗时0.271ms 
执行[s8查询]10000次, 平均耗时0.2354ms 
执行[i8查询]10000次, 平均耗时0.2189ms 
执行[c4查询]10000次, 平均耗时0.303ms 
执行[s4查询]10000次, 平均耗时0.3094ms 
执行[i4查询]10000次, 平均耗时0.25ms

结论:

无索引:全表扫描不会因为数据较小就变快,而是整体速度相同,int/bigint作为原生类型稍快12%。

有索引:char与varchar性能差不多,int速度稍快18%

在数据存储、读写方面,整数与等长字符串相同,varchar额外多了一个字节所以性能可能会些许影响(1/n)。

在数据运算、对比方面,整数得益于原生支持,因此会比字符串稍快一丁点。

若采用索引,所谓整数、字符串的性能差距更是微乎其微。

在实际开发中,许多开发者经常使用char(1)、char(4)这样的字符串表示类型枚举,这种做法在我看来属于最佳方案,因为这种做法在存储空间、运算性能、可读性、可维护性、可扩展性方面,远胜于int、enum这种数据类型。

延伸 · 阅读

精彩推荐
  • MysqlMySQL查询重复数据(删除重复数据保留id最小的一条为唯一数据)

    MySQL查询重复数据(删除重复数据保留id最小的一条为唯一数据)

    查重是我们在工作中经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于MySQL查询重复数据(删除重复数据保留id最小的一条为唯一数据)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的...

    追逐时光4402019-06-03
  • MysqlSQL和NoSQL之间的区别总结

    SQL和NoSQL之间的区别总结

    在本篇内容里我们给大家精选了关于SQL和NoSQL之间的区别的总结内容,对此有需要的朋友们跟着学习下。...

    laozhang3362019-06-07
  • MysqlMysql查询表中最小可用id值的方法

    Mysql查询表中最小可用id值的方法

    这篇文章主要介绍了Mysql查询表中最小可用id值的方法,在文中通过sql语句给大家介绍了MySQL中删除id为最小的数据,需要的朋友可以参考下...

    dn961552019-06-19
  • Mysqlmysql8.0.14.zip安装时自动创建data文件夹失败服务无法启动

    mysql8.0.14.zip安装时自动创建data文件夹失败服务无法启动

    这篇文章主要介绍了mysql8.0.14.zip安装时自动创建data文件夹失败,导致服务无法启动的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    zzjba19z4052019-06-05
  • MysqlMySQL查询条件中放置on和where的区别分析

    MySQL查询条件中放置on和where的区别分析

    这篇文章主要给大家介绍了关于MySQL查询条件中放置on和where的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...

    haoyq3012019-06-09
  • MysqlUbuntu18.04安装mysql5.7.23的教程

    Ubuntu18.04安装mysql5.7.23的教程

    这篇文章主要为大家详细介绍了Ubuntu18.04安装mysql5.7.23的教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    登峰小蚁2892019-06-05
  • MysqlMySQL中字段类型char、varchar和text的区别

    MySQL中字段类型char、varchar和text的区别

    今天小编就为大家分享一篇关于MySQL中字段类型char、varchar和text的区别,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    CODETC3782019-06-01
  • MysqlMySQL普通索引和唯一索引的深入讲解

    MySQL普通索引和唯一索引的深入讲解

    这篇文章主要给大家介绍了关于MySQL普通索引和唯一索引的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...

    点滴积累3292019-06-09