图片来自PexelsMySQL历史MySQL的历史可以追溯到1979年,其创始人MichaelWidenius在开发报表工具时设计了一套API。后来他的客户要求他的API支持sql语句,他直接借助mSQL(当时比较牛)的代码集成到自己的存储引擎中。但他总觉得不满足,萌生了自己建数据库的想法。1996年,MySQL1.0发布,仅仅几个月后,1996年10月,MySQL3.11.1发布Solaris版本,一个月后,Linux版本诞生。从那时起,MySQL就慢慢发展到被接受。1999年,MichaelWidenius创立了MySQLAB公司。MySQL从个人开发转为团队开发。2000年,使用GPL协议开源。2001年,发生了MySQL生命中的一件大事,那就是存储引擎InnoDB的诞生!直到现在,MySQL可以选择的存储引擎,InnoDB依然是NO.1。2008年1月,MySQLAB被Sun以10亿美元收购,MySQL数据库进入Sun时代。Sun为MySQL的开发提供了极好的环境。2008年11月,MySQL5.1发布,MySQL成为最流行的小型数据库。在此之前,甲骨文在2005年收购了InnoDB,因此InnoDB一直作为第三方插件供用户选择。2009年4月,甲骨文以74亿美元收购Sun,MySQL进入甲骨文时代。2010年12月,MySQL5.5发布,Oracle终于让InnoDB成为了MySQL的默认存储引擎,MySQL从此进入了辉煌的时代。不过,从那以后,甲骨文对MySQL的态度逐渐发生了变化。甲骨文虽然声称MySQL仍然尊重GPL协议,但暗中将所有开发人员换成了甲骨文自己的人。开源社区已经无法影响MySQL发展的步伐,真正想做贡献的人也被拒之门外。MySQL随时都可能闭源……原来的MariaDB是个什么东西?先说一下MySQL名字的由来,MichaelWidenius的女儿的缩写是MY,MichaelWidenius很可能把MySQL当成了自己的女儿。MichaelWidenius看到自己辛辛苦苦养起来的MySQL被Oracle搞成这个样子,非常失望。他决定在MySQL闭源之前对MySQL进行分支,仍然沿用他女儿的名字MariaDB(玛丽亚数据库)。MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区维护。MariaDB使用GPL许可的目的是为了与MySQL完全兼容,包括API和命令行,从而轻松成为MySQL的替代品。在存储引擎方面,使用XtraDB替代MySQL的InnoDB。MariaDB由MySQL的创始人MichaelWidenius领导,由开源社区的大神开发。因此,大家认为MariaDB有着比MySQL更纯正的MySQL血统。初始版本更新与MySQL同步。相对于MySQL5及之后的版本,MariaDB也有对应的5.1~5.5版本。后来,MariaDB终于摆脱了MySQL。它的版本号直接从10.0开始,并按照自己的节奏发展。当然,它还是完全兼容MySQL的。现在,MariaDB在数据特性、性能等方面已经超越了MySQL。测试环境性能测试环境如下:CPU:I7内存:8GOS:Windows1064位硬盘类型:SSDMySQL:8.0.19MariaDB:10.4.12分别在MySQl和MariaDB中创建名为performance的数据库,并创建日志所有表都使用innodb作为数据库引擎:CREATETABLE`performance`.`log`(`id`INTUNSIGNEDNOTNULLAUTO_INCREMENT,`time`DATETIMENOTNULL,`level`ENUM('info','debug','error')NOTNULL,`message`TEXTNOTNULL,PRIMARYKEY(`id`))ENGINE=INNODBCHARSET=utf8;插入性能singleinsert单插入测试结果如下表所示:MariaDB单插入性能比MySQL强1倍左右。批量插入批量插入的测试结果如下表所示:在上面的测试结果中,MariaDB并没有绝对的优势,有时甚至比MySQL还慢,但平均水平还是高于MySQL。查询性能已经过多次插入测试。我在两个数据库中插入了很多数据。这时候我用下面的sql查询表的数据量:SELECTCOUNT(0)FROMLOG结果两个表都是6,785,000条,MariaDB用了3.065秒,MySQL用了6.404秒。此时我机器内存用了6G,MariaDB用了474284K,MySQL只用了66848K,看来MariaDB几乎是在牺牲空间。在没有索引的情况下,先查询时间字段的最大值和最小值:SELECTMAX(TIME),MIN(TIME)FROMLOGMariaDB耗时6.333秒,MySQL耗时8.159秒。接下来测试过滤时间字段在0点到1点之间的数据,并对时间字段进行排序:SELECT*FROMLOGWHERETIME>'2020-02-0400:00:00'ANDTIME<'2020-02-0401:00:00'ORDERBYTIMEMariaDB耗时6.996秒,MySQL耗时10.193秒。然后测试查询level字符为info的数据:SELECT*FROMLOGWHERELEVEL='info'MariaDB耗时0.006秒,MySQL耗时0.049秒。最后测试查询message字段值为debug的数据:SELECT*FROMLOGWHEREMESSAGE='debug'MariaDB耗时0.003秒,MySQL耗时0.004秒。有索引为两个数据库的字段创建索引:ALTERTABLE`performance`.`log`ADDINDEX`t??ime`(`time`),ADDINDEX`level`(`level`),ADDFULLTEXTINDEX`message`(`message`);MariaDB用了2分47秒,MySQL用了3分48秒。然后使用上面的测试项进行测试,结果如下表所示:有些加索引后的结果不如不加索引时理想,说明在实际使用中并不是每个字段都需要加索引。综上所述,在上面的测试中,MariaDB的性能确实优于MySQL。看来各大厂商放弃MySQL拥抱MariaDB是非常合情合理的。作者:swanmy编辑:陶佳龙来源:http://r6d.cn/b27qt
