吊打MySQL,MariaDB到底强在哪?

数据库 MySQL MariaDB
近年来,不少程序员在吹捧 MariaDB,抛弃 MySQL。本文总结了一些 MariaDB 强过 MySQL 的地方,分享给大家!

[[383750]]

图片来自 Pexels  

 

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(TIMEFROM 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 还是非常有道理的。

作者:swanmy

编辑:陶家龙

出处:http://r6d.cn/b27qt

 

责任编辑:武晓燕 来源: /r6d.cn
相关推荐

2017-06-22 16:18:58

IBM光谱存储软件定义存储

2019-05-22 10:38:00

5G芯片中兴

2021-10-08 14:43:24

WiFi 5WiFi 6远程

2012-09-13 14:11:07

Windows Ser微软云平台

2017-11-30 14:14:53

2021-12-15 06:58:28

RedisEhCache缓存

2021-10-06 19:02:36

Keil编译器Armclang

2024-04-10 08:15:17

模型语言模型GPT

2020-10-30 12:41:14

PostgreSQL数据库MySQL

2020-04-30 11:11:30

MySQLMGR数据库

2016-11-21 17:27:04

Android 推送

2021-07-26 08:12:31

开源API网关

2021-12-01 07:26:12

AIOps企业

2020-11-27 10:16:10

Java反射代码

2014-01-07 13:54:40

Hadoop日志

2024-11-05 09:32:47

2016-08-25 08:58:36

云计算阿里云腾讯云

2013-06-21 13:49:08

MariaDB

2023-02-28 11:29:09

存储函数MySQL
点赞
收藏

51CTO技术栈公众号