你知道的越多,不知道的就越多,业余的像一棵小草!

你来,我们一起精进!你不来,我和你的竞争对手一起精进!

编辑:业余草

blog.csdn.net/zhmh326/article/details/104168710

推荐:https://www.xttblog.com/?p=5151

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

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;

插入性能

单条插入

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

条数\数据库 MySQL MariaDB
1000 0:00:04.397270 0:00:02.534988
2000 0:00:09.839936 0:00:04.822289
3000 0:00:15.934843 0:00:07.295792
4000 0:00:20.356583 0:00:08.895680
5000 0:00:23.735397 0:00:10.766463
6000 0:00:31.431234 0:00:16.583214
7000 0:00:36.413297 0:00:17.359391
8000 0:00:40.957255 0:00:18.281750
9000 0:00:47.125131 0:00:21.483223
10000 0:00:54.979244 0:00:24.445878
平均 0:00:00.005185 0:00:00.002409

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

批量插入

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

条数\数据库 MySQL MariaDB
1000 0:00:00.066978 0:00:00.019711
2000 0:00:00.086768 0:00:00.038898
3000 0:00:00.132641 0:00:00.084769
4000 0:00:00.100773 0:00:00.058774
5000 0:00:00.119664 0:00:00.178519
6000 0:00:00.313400 0:00:00.143641
7000 0:00:00.181570 0:00:00.251319
8000 0:00:00.295206 0:00:00.145611
9000 0:00:00.321140 0:00:00.124668
10000 0:00:00.328125 0:00:00.181082
平均 0:00:00.000035 0:00:00.000022

上面的测试结果,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秒。再用上面的测试项目进行测试,结果如下表所示:

项目\数据库 MySQL MariaDB
查询time字段最值 0.006秒 0.001秒
过滤time字段并排序 0.398秒 0.020秒
查询level字段 0.065秒 0.049秒
查询message字段 0.003秒 0.005秒

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

总结

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

性能超过MySQL的MariaDB到底强在哪里?相关推荐

  1. 吊打MySQL,MariaDB到底强在哪?

    " 近年来,不少程序员在吹捧 MariaDB,抛弃 MySQL.本文总结了一些  MariaDB 强过 MySQL 的地方,分享给大家! 图片来自 Pexels MySQL 的发展史 MyS ...

  2. MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文呢?我们来搞搞清楚

    MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文呢?我们来搞搞清楚 一.关于UTF-8 UTF-8 Unicode Transformation Format-8bit.是用以解决 ...

  3. mysql数据库中到底能建多少张表?(单实例下单个库)

    单实例mysql数据库中到底能建多少张表? 业务两个同学今天就这个问题过来探讨,他们的诉求是: 1. 一个用户的表要全部放到一个数据库中. 2. 预计1000个用户每个用户初步规划1000张表. 这1 ...

  4. 清华自研深度学习框架「计图」开源!多项任务性能超过PyTorch

    2020-03-20 11:42:07 乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI AI框架,又来重磅中国玩家. 刚刚,清华自研的深度学习框架,正式对外开源."贵系&quo ...

  5. LAMP架构介绍、MySQL和MariaDB介绍、MySQL安装

    2019独角兽企业重金招聘Python工程师标准>>> LAMP架构介绍 Linux+Apache+MySQL+PHP 就是在linux系统上安装httpd. mysql .PHP, ...

  6. Mysql(Mariadb)数据库主从复制

    Mysql(Mariadb)数据库主从复制 Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦 ...

  7. 数据库:MySQL和MariaDB的JDBC连接

    目录 QUESTION:MySQL和MariaDB的JDBC连接? ANSWER: 区别与联系: MySQL: MariaDB: java连接mariaDB数据库的设置:(tomcat 8) 第一种方 ...

  8. 专访阿里巴巴量子实验室:最强量子电路模拟器“太章”到底强在哪?

    摘要: 刷爆朋友圈的最强量子电路模拟器到底强在哪呢?云栖社区采访了阿里巴巴量子实验室团队的施尧耘博士和陈建鑫博士来位大家一一解读. 本月早些时候,阿里巴巴量子实验室成功研制当前世界最强的量子电路模拟器 ...

  9. MySQL--My.cnf配置文件模板 MYSQL AND MARIADB CONFIGURATION FILE TEMPLATE (MY.CNF/MY.INI)

    MySQL--My.cnf配置文件模板 Introduce The MySQL and MariaDB default configuration is not very great for prod ...

最新文章

  1. IOS手机全屏长按识别二维码HTML代码
  2. cd、mkdir、rmdir、touch、rm命令,绝对路径与相对路径
  3. java中两任务并行运行_Java并行编程中的“可调用”与“可运行”任务
  4. 逼疯上海人的垃圾分类满月了:羊肉串变羊肉吕,奶茶里珍珠按颗算...
  5. 职场见闻录(01) - 怎样回答这两个问题?
  6. 为什么我 11 岁的儿子说要放弃编程,却又转战 Python
  7. 1003. Parity(并查集)
  8. C#cmd执行命令隐藏窗口,并保持程序一直运行
  9. 闽江学院2015-2016学年下学期《软件测试》课程-第四次博客作业
  10. chengg0769 近期文章列表 垂直搜索相关(2007-07-10)
  11. Java学生管理系统项目
  12. C语言实现 掷骰子游戏
  13. wps如何在目录里面打省略号_wps中目录的点怎么打(目录的点点怎样手动打)
  14. 标准焦距;焦距与景深的关系
  15. JavaScript设计模式(2)—— 多种继承方式的实现及原理
  16. 数据挖掘期末复习01-02
  17. CSDN ARIMA R语言_R语言时间序列:ARIMA / GARCH模型的交易策略在外汇市场预测应用...
  18. 剑指offer——栈
  19. 考初级计算机证需要考什么,计算机初级证书要考哪些内容
  20. windows下制作macos安装u盘_制作MacOS系统启动盘教程以及安装教程

热门文章

  1. 5G网关如何赋能智慧油井监测?油井管理如何迈上新台阶
  2. 基于卷积神经网络故障诊断模型的 t-SNE特征可视化
  3. 中职计算机最好大专学校,成都计算机大专哪个好,成都最好的计算机大专
  4. SpringBoot学习第三天
  5. 一次性解决微信支付-JSAPI支付问题(想把微信支付JSAPI文档撰写者按在地上摩擦)
  6. jsp内置对象是什么意思
  7. 《Python Web开发实战》踩地雷记17/3/22
  8. 闷棍暴打面试官 Spring源码系列: (一) Spring 如何解决循环依赖
  9. html引用图片资源无法显示的问题,html引用图片资源无法显示的问题
  10. canvas 画圆 角度问题