MySQL与MariaDB性能比拼
文章目录
- MySQL与MariaDB性能比拼
- MySQL的发展史
- 横空出世的MariaDB是什么鬼
- 测试环境
- 插入性能
- 单条插入
- 批量插入
- 查询性能
- 无索引
- 有索引
- 总结
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作为数据库引擎:
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性能比拼相关推荐
- 淘宝内部分享:MySQL MariaDB性能优化
淘宝内部分享:MySQL & MariaDB性能优化 摘要:MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,必须进行不断的优化,而优化是一个复杂的任务, ...
- 性能超过MySQL的MariaDB到底强在哪里?
你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 blog.csdn.net/zhmh326/article/details/10 ...
- 吊打MySQL,MariaDB到底强在哪?
" 近年来,不少程序员在吹捧 MariaDB,抛弃 MySQL.本文总结了一些 MariaDB 强过 MySQL 的地方,分享给大家! 图片来自 Pexels MySQL 的发展史 MyS ...
- LAMP架构介绍、MySQL和MariaDB介绍、MySQL安装
2019独角兽企业重金招聘Python工程师标准>>> LAMP架构介绍 Linux+Apache+MySQL+PHP 就是在linux系统上安装httpd. mysql .PHP, ...
- Mysql(Mariadb)数据库主从复制
Mysql(Mariadb)数据库主从复制 Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦 ...
- 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 ...
- Navicat(服务器对象) -2之MySQL 或 MariaDB 对象
MySQL 或 MariaDB 对象 http://www.navicat.com.cn/manual/online_manual/cn/navicat/win_manual/index.html 要 ...
- 配置Nginx前端Apache后端服务器LNMPA-与LNMP,HHVM性能比拼
文章目录 LNMPA一键安装 LNMPA性能比较 HHVM性能比拼 Nginx前端小结 文章目录 LNMPA一键安装 LNMPA性能比较 HHVM性能比拼 Nginx前端小结 Apache和Nginx ...
- MySQL 大表性能优化
单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的.而事实上很多时 ...
- MySQL与MariaDB学习笔记
博客链接: http://codeshold.me/2017/10/learning_mysql_mariadb_notes.html 本文是<MySQL与MariaDB学习指南>的简要学 ...
最新文章
- linux安装grub
- php file_get_contents 临时目录 fopen,php fopen()和file_get_contents() 区别介绍
- discuz 文档说明
- 计算机应用基础期末考试电大,(电大)期末考试2017年广播电视大学网考《计算机应用基础》重点复习题目汇总版(理论题及操作题)...
- 【转】获取命名空间、类名、方法名
- 别再无聊地吹捧了,一起来动手实现MAE玩玩吧!
- wxWidgets:wxGenericAboutDialog类用法
- udp协议的服务器是哪种类型,UDP协议
- 因担心5G电磁辐射 这个地方的居民试图阻止5G基站扩张
- python将对象放入列表根据某个属性排序_关于python:如何根据对象的属性对对象列表进行排序?...
- u8虚拟服务器端口,用友u8服务器参数配置
- 检测同心圆_两“心”携手,共抗心衰——“同心圆”心衰俱乐部走进临安图书馆~...
- 联想万全服务器告警信息在哪里看,华为网络设备查看告警信息
- php的一些编码问题
- 兄弟HL-1118加粉清零
- python ffmpeg直播_python+ffmpeg视频并发直播压力测试
- 常用工作方法总结(7S、SWOT分析、PDCA循环、SMART原则、6W2H、时间管理、WBS等)
- interface和abstract interface
- 对闰年和平年计算均值
- HTML、CSS、JS(JAVA Sprict)