社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

扔掉,MySQL!性能被 MariaDB 吊打…

JAVA • 4 年前 • 315 次点击  
由于公众号文章推送规则改变,所以为了大家能够准时收到我们的文章推送,请记得将公众号: JAVA 设为星标~这样就不会错过每一篇精彩的推送啦~

 来源 |blog.csdn.net/zhmh326/article/details/104168710 


MySQL与MariaDB性能比拼

MySQL的发展史

MySQL的历史可以追溯到1979年,它的创始人叫作Michael Widenius,他在开发一个报表工具的时候,设计了一套API,后来他的客户要求他的API支持sql语句,他直接借助于mSQL(当时比较牛)的代码,将它集成到自己的存储引擎中。但是他总是感觉不满意,萌生了要自己做一套数据库的想法。一到1996年,MySQL 1.0发布,仅仅过了几个月的时间,1996年10月MySQL 3.11.1当时发布了Solaris的版本,一个月后,linux的版本诞生,从那时候开始,MySQL慢慢的被人所接受。1999年,Michael Widenius成立了MySQL AB公司,MySQL由个人开发转变为团队开发,2000年使用GPL协议开源。2001年,MySQL生命中的大事发生了,那就是存储引擎InnoDB的诞生!直到现在,MySQL可以选择的存储引擎,InnoDB依然是No.1。2008年1月,MySQL AB公司被Sun公司以10亿美金收购,MySQL数据库进入Sun时代。Sun为MySQL的发展提供了绝佳的环境,2008年11月,MySQL 5.1发布,MySQL成为了最受欢迎的小型数据库。在此之前,Oracle在2005年就收购了InnoDB,因此,InnoDB一直以来都只能作为第三方插件供用户选择。2009年4月,Oracle公司以74亿美元收购Sun公司,MySQL也随之进入Oracle时代。2010年12月,MySQL 5.5发布,Oracle终于把InnoDB做成了MySQL默认的存储引擎,MySQL从此进入了辉煌时代。然而,从那之后,Oracle对MySQL的态度渐渐发生了变化,Oracle虽然宣称MySQL依然尊少GPL协议,但却暗地里把开发人员全部换成了Oracle自己人,开源社区再也影响不了MySQL发展的脚步,真正有心做贡献的人也被拒之门外,MySQL随时都有闭源的可能……

横空出世的MariaDB是什么鬼

先提一下MySQL名字的由来吧,Michael Widenius的女儿的简称就是MY,Michael Widenius大概也是把MySQL当成自己的女儿吧。看着自己辛苦养大的MySQL被Oracle搞成这样,Michael Widenius非常失望,决定在MySQL走向闭源前,将MySQL进行分支化,依然是使用了自己女儿的名字MariaDB(玛莉亚DB)。MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。MariaDB由MySQL的创始人Michael Widenius主导,由开源社区的大神们进行开发。因此,大家都认为,MariaDB拥有比MySQL更纯正的MySQL血脉。最初的版本更新与MySQL同步,相对MySQL5以后的版本,MariaDB也有相应的5.1~5.5的版本。后来MariaDB终于摆脱了MySQL,它的版本号直接从10.0开始,以自己的步伐进行开发,当然,还是可以对MySQL完全兼容。现在,MariaDB的数据特性、性能等都超越了MySQL。

测试环境

本性能测试环境如下:

  • CPU:I7

  • 内存:8G

  • OS:Windows 10 64位

  • 硬盘类型:SSD

  • MySQL:8.0.19

  • MariaDB:10.4.12

分别在MySQl和MariaDB中创建名为performance的数据库,并创建log表,都使用innodb作为数据库引擎:

  1. CREATE TABLE `performance`.`log`(  

  2.  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,

  3.  `time` DATETIME NOT NULL,

  4.  `level` ENUM('info','debug', 'error') NOT NULL,

  5.  `message` TEXT NOT NULL,

  6.  PRIMARY KEY (`id`)

  7. ) ENGINE=INNODB CHARSET=utf8;

插入性能

单条插入

单条插入的测试结果如下表所示:

MariaDB单条数据插入的性能比MySQL强1倍左右。

批量插入

批量插入的测试结果如下表所示:

上面的测试结果,MariaDB并没有绝对优势,甚至有时还比MySQL慢,但平均水平还是高于MySQL。

查询性能

经过了多次插入测试,我两个数据库里插入了很多数据,此时用下面的sql查询表中的数据量:




    
  1. SELECT COUNT(0) FROM LOG

结果两个表都是6785000条,MariaDB用时3.065秒,MySQL用时6.404秒。此时我机器的内存用了6个G,MariaDB用了474284 K,MySQL只用了66848 K。看来MariaDB快是牺牲了空间换取的。

无索引

先查询一下time字段的最大值和最小值:

  1. SELECT MAX(TIME), MIN(TIME) FROM LOG

MariaDB用时6.333秒,MySQL用时8.159秒。接下来测试过滤time字段在0点到1点之间的数据,并对time字段排序:

  1. SELECT * FROM LOG WHERE TIME > '2020-02-04 00:00:00' AND TIME < '2020-02-04 01:00:00' ORDER BY TIME

MariaDB用时6.996秒,MySQL用时10.193秒。然后测试查询level字符是info的数据:

  1. SELECT * FROM LOG WHERE LEVEL = 'info'

MariaDB用时0.006秒,MySQL用时0.049秒。最后测试查询message字段值为debug的数据:

  1. SELECT * FROM LOG WHERE MESSAGE = 'debug'

MariaDB用时0.003秒,MySQL用时0.004秒。

有索引

分别对两个数据库的字段创建索引:

  1. ALTER TABLE `performance`.`log`  

  2.  ADD  INDEX `time`(`time`),

  3.  ADD  INDEX `level`(`level`),

  4.  ADD FULLTEXT INDEX `message`(`message`);

MariaDB用时2分47秒,MySQL用时3分48秒。再用上面的测试项目进行测试,结果如下表所示:

有些结果添加了索引后还不如不加索引时理想,说明实际使用时并不是每个字段都需要添加索引的。

总结

在上面的测试中MariaDB的性能的确优于MySQL,看来各大厂商放弃MySQL拥抱MariaDB还是非常有道理的。


往期推荐:

推荐一套超高颜值的 Spring Boot 快速开发框架【文末送书】

微信 | QQ 防撤回,支持电脑端和手机端,再也不会错过“精彩”内容了

请马上卸载Notepad++...!

一些恶心的代码片段


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/108225
 
315 次点击