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;
1234567
插入性能
单条插入
单条插入的测试后果如下表所示:
条数 \ 数据库 | 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 还是十分有情理的。
作者:swanmy\
本文链接:https://blog.csdn.net/zhmh326…\
版权申明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协定,转载请附上原文出处链接和本申明。
近期热文举荐:
1.600+ 道 Java 面试题及答案整顿 (2021 最新版)
2. 终于靠开源我的项目弄到 IntelliJ IDEA 激活码了,真香!
3. 阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具!
4.Spring Cloud 2020.0.0 正式公布,全新颠覆性版本!
5.《Java 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!