MySQL与MariaDB性能比拼,哪个更出色?
文章来自:PHP开源社区
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
还是非常有道理的。
本作品采用《CC 协议》,转载必须注明作者和本文链接
干货,博主自己对比两款性能,实践出真知! 所以大佬的公司使用什么做数据库呢!
看来 MariaDB 快是牺牲了空间换取的。
这句话结论吗?