关于mysql:再见了MySQL性能被-MariaDB-吊打

52次阅读

共计 2855 个字符,预计需要花费 8 分钟才能阅读完成。

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 作为数据库引擎:

CREATE TABLE `performance`.`log`(  
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `time` DATETIME NOT NULL,
  `level` ENUM('info','debug','error') NOT NULL,
  `message` TEXT NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8;

插入性能

单条插入

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

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

批量插入

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

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

查问性能

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

SELECT COUNT(0) FROM LOG

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

无索引

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

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

后果:MariaDB 用时 6.333 秒,MySQL 用时 8.159 秒。

接下来测试过滤 time 字段在 0 点到 1 点之间的数据,并对 time 字段排序:

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 的数据:

SELECT * FROM LOG WHERE LEVEL = 
'info'

后果:MariaDB 用时 0.006 秒,MySQL 用时 0.049 秒。

最初测试查问 message 字段值为 debug 的数据:

SELECT * FROM LOG WHERE MESSAGE = 
'debug'

后果:MariaDB 用时 0.003 秒,MySQL 用时 0.004 秒。

有索引

别离对两个数据库的字段创立索引:

ALTER TABLE `performance`.`log`   
  ADD  INDEX `time` (`time`),
  ADD  INDEX `level` (`level`),
  ADD FULLTEXT INDEX `message` (`message`);

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

有些后果增加了索引后还不如不加索引时现实,阐明理论应用时并不是每个字段都须要增加索引的。

总结

在下面的测试中 MariaDB 的性能确实优于 MySQL,看来各大厂商放弃 MySQL 拥抱 MariaDB 还是十分有情理的。

作者:swanmy
原文:blog.csdn.net/zhmh326/article/details/104168710

正文完
 0