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

 更新时间:2018年10月15日 08:38:39   投稿:laozhang  
在本篇文章中我们给大家分享了关于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这种数据类型。

相关文章

  • Mysql和文件系统的关联详情

    Mysql和文件系统的关联详情

    这篇文章主要介绍了Mysql和文件系统的关联详情,Mysql常用的存储引擎如InnoDB、MyISAM采用的是文件存储,自然和文件系统挂钩,那么Mysql都有哪些地方用到了文件系统呢,下面我们一起进入文章学习详细内容吧
    2022-09-09
  • MySQL中LIKE运算符的多种使用方式及示例演示

    MySQL中LIKE运算符的多种使用方式及示例演示

    无论是简单的模式匹配还是复杂的模式匹配,LIKE运算符都提供了强大的功能来满足不同的匹配需求,通过本文的介绍,我们详细了解了在MySQL数据库中使用LIKE运算符进行模糊匹配的多种方式,感兴趣的朋友跟随小编一起看看吧
    2023-07-07
  • mysql每半小时平均值计算的sql语句

    mysql每半小时平均值计算的sql语句

    有时候我们需要计算每半小时的平均值,那么就需要参考下面的sql语句了
    2015-11-11
  • Windows版Mysql5.6.11的安装与配置教程

    Windows版Mysql5.6.11的安装与配置教程

    这篇文章详细介绍了Windows下Mysql5.6.11的下载、安装与配置教程,需要的朋友可以参考下
    2013-06-06
  • MySql 8.0.16版本安装提示已经不使用“UTF8B3”而是使用“UTF8B4”问题

    MySql 8.0.16版本安装提示已经不使用“UTF8B3”而是使用“UTF8B4”问题

    这篇文章主要介绍了MySql 8.0.16版本安装提示已经不使用“UTF8B3”而是使用“UTF8B4”问题 ,需要的朋友可以参考下
    2019-07-07
  • Mysql添加外键的两种方式详解

    Mysql添加外键的两种方式详解

    外键可以保持数据一致性,完整性,主要目的是控制存储在外键表中的数据,下面这篇文章主要给大家介绍了关于Mysql添加外键的两种方式,需要的朋友可以参考下
    2023-04-04
  • MySQL分区表的详细介绍

    MySQL分区表的详细介绍

    当设计MySQL分区表时,需要考虑以下几个方面,分区策略、分区字段、分区数量和分区函数,本文就来介绍一下MySQL分区表,感兴趣的可以了解一下
    2023-10-10
  • MySQL 5.6.51 解压版(zip版)安装配置图文方法

    MySQL 5.6.51 解压版(zip版)安装配置图文方法

    这两天刚试用了一下MySQL5.6.51,感觉还不错,有兄弟戏称是一个高富帅版本。现将MySQL5.6.51 zip解压版本的安装配置过程记录如下,希望能给需要安装该版本的朋友一点参考作用
    2015-08-08
  • Mysql排序获取排名的实例代码

    Mysql排序获取排名的实例代码

    这篇文章通过实例代码给大家介绍了mysql排序获取排名的相关知识,感兴趣的朋友一起看看吧
    2018-05-05
  • 你有没有遗忘mysql的历史记录

    你有没有遗忘mysql的历史记录

    程序出现了问题,明知道可能是sql语句造成的,但是因为框架的原因,分析起来十分麻烦,于是打算直接查看数据库里面的历史记录.
    2014-09-09

最新评论