• 售前

  • 售后

热门帖子
入门百科

工作这么多年还不知道如何对MySQL进行性能压测?这也太Low了吧

[复制链接]
白云苍狗N 显示全部楼层 发表于 2022-1-15 14:12:14 |阅读模式 打印 上一主题 下一主题
大家好,我是冰河~~
今天给大家带来一篇关于MySQL的技术文,这也是我对MySQL使用UUID做主键与int数字做主键做的性能压测。
之前,总有小伙伴问我:为何使用UUID做MySQL的主键,MySQL性能会比较低。之前我也跟大家基于MySQL的底层数据结构讨论了为何使用UUID做主键性能比较低下。
今天,我们就一起基于MySQL 5.7做一个实际的主键性能压测。让大家切实感受下使用UUID做MySQL的主键和int数字做MySQL的主键,性能到底有多少差异。
环境准备

在MySQL 5.7中分别创建三张数据表:


  • test_varchar:以UUID作为主键。
  • test_long:以bigint作为主键。
  • test_int:以int作为主键。
三个表的字段,除了主键ID 分别采用varchar,bigint 和自动增长int不同外,其他三个字段都为 varchar 36位
另外,建表时使用InnoDB存储引擎,并且向数据库中插入100W条数据,用以测试。
InnoDB压测情况

压测信息



  • 数据库:MySQL 5.7
  • 表类型:InnoDB
  • 数据量:100W条
主键采用uuid 32位

运行查询语句1:
  1. SELECT COUNT(id) FROM test_varchar;
复制代码
运行查询语句2:
  1. SELECT * FROM test_varchar WHERE vname='00004629-b052-11e1-96aa-002655b28d7b';
复制代码
运行查询语句3:
  1. SELECT * FROM test_varchar WHERE id='00004599b05211e196aa002655b28d7b';
复制代码
三条查询语句的耗时分别如下所示:


  • 语句1消耗时间平均为:2.7秒;
  • 语句2消耗时间平均为:3秒;
  • 语句3消耗时间平均为:0秒;(多方测试,条件里只要有主键ID,查询速度毫秒级都显示000。测试的ID值,有前一百条的,也有后90多万条的。查询时间完全一样,毫秒级都为000)
主键采用bigint

主键采用bigint,使用uuid_short()产生数据,数据为有序列的纯数字(22461015967875697)。(其相当于自动增长,只是固定的基数值较大而已。)
运行查询语句1:
  1. SELECT COUNT(id) FROM test_long;
复制代码
运行查询语句2:
  1. SELECT * FROM test_long WHERE vname='d7f28a24-b053-11e1-96aa-002655b28d7b';
复制代码
运行查询语句3:
  1. SELECT * FROM test_long WHERE id='22461015967875702';
复制代码
三条查询语句的耗时分别如下所示:


  • 语句1消耗时间平均为:1.2秒;
  • 语句2消耗时间平均为:1.40秒;
  • 语句3消耗时间平均为:0秒;(多方测试,条件里只要有主键ID,查询速度毫秒级都显示000。测试的ID值,有前一百条的,也有后90多万条的。查询时间完全一样,毫秒级都为000)
主键采用自增int

运行查询语句1:
  1. SELECT COUNT(id) FROM test_int;
复制代码
运行查询语句2:
  1. SELECT * FROM test_int WHERE vname='c80f8427-b059-11e1-96aa-002655b28d7b';
复制代码
运行查询语句3:
  1. SELECT * FROM test_int WHERE id=900000;
复制代码
其中,主键采用mysql自带的自动增长,数据为纯数字(1,2,3,4,5……)。
三条查询语句的耗时分别如下所示:


  • 查询语句1消耗时间平均为:1.07秒;
  • 查询语句2消耗时间平均为:1.31秒;
  • 查询语句3消耗时间平均为:0秒;(多方测试,条件里只要有主键ID,查询速度毫秒级都显示000。测试的ID值,有前一百条的,也有后90多万条的。查询时间完全一样,毫秒级都为000)
总结:由此可见,MySQL InnoDB 主键采用自动增长性能较高,但是在技术工作中,能否直接使用自增int类型的数字作为MySQL的主键,大家需要根据具体需求确定。
MyISAM压测情况

压测信息



  • 数据库:MySQL 5.7
  • 表类型:MyISAM
  • 数据量:100W条
注意:此处测试所使用的表和SQL语句同上,此处只记录消耗时间。
主键采用uuid 32位

主键采用uuid 32位。


  • 语句1消耗时间平均为:0秒;
  • 语句2消耗时间平均为:0.53秒;
  • 语句3消耗时间平均为:0秒;(多方测试,条件里只要有主键ID,查询速度毫秒级都显示000。测试的ID值,有前一百条的,也有后90多万条的。查询时间完全一样,毫秒级都为000)
主键采用bigint

主键采用bigint,使用uuid_short()产生数据,数据为有序列的纯数字(22461015967875697)。(其相当于自动增长,只是固定的基数值较大而已。)


  • 语句1消耗时间平均为:0秒;
  • 语句2消耗时间平均为:0.51秒;
  • 语句3消耗时间平均为:0秒;(多方测试,条件里只要有主键ID,查询速度毫秒级都显示000。测试的ID值,有前一百条的,也有后90多万条的。查询时间完全一样,毫秒级都为000)
主键采用自增int

主键采用mysql自带的自动增长,数据为纯数字(1,2,3,4,5……)。


  • 语句1消耗时间平均为:0秒;
  • 语句2消耗时间平均为:0.48秒;
  • 语句3消耗时间平均为:0秒;(多方测试,条件里只要有主键ID,查询速度毫秒级都显示000。测试的ID值,有前一百条的,也有后90多万条的。查询时间完全一样,毫秒级都为000)
总结:由此可见,MySQL MyISAM 主键采用自动增长性能比其他有微弱的优势。测试数据为100w,如果是1000W 1亿,我想这个优势会拉大,如果你还有外键关联查询,这个优势就更明显了。
当然,如果你设计的系统,数据量还没有超过100W,你用啥主键类型都无所谓。我测试电脑是笔记本,如果是专业的服务器,估计100W条,mysql MyISAM 的这些测试,根本都测不出来时间差吧。
好了,今天就到这儿吧,我是冰河,我们下期见~~
写在最后

如果你想进大厂,想升职加薪,或者对自己现有的工作比较迷茫,都可以私信我交流,希望我的一些经历能够帮助到大家~~
推荐阅读:

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,我是冰河,我们下期见~~
  
来源:https://blog.caogenba.net/l1028386804/article/details/122480870
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作