<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          扔掉,MySQL!性能被 MariaDB 吊打…

          共 3247字,需瀏覽 7分鐘

           ·

          2021-03-01 11:52

          由于公眾號(hào)文章推送規(guī)則改變,所以為了大家能夠準(zhǔn)時(shí)收到我們的文章推送,請(qǐng)記得將公眾號(hào): JAVA 設(shè)為星標(biāo)~這樣就不會(huì)錯(cuò)過(guò)每一篇精彩的推送啦~

           來(lái)源 |blog.csdn.net/zhmh326/article/details/104168710 


          MySQL與MariaDB性能比拼

          MySQL的發(fā)展史

          MySQL的歷史可以追溯到1979年,它的創(chuàng)始人叫作Michael Widenius,他在開發(fā)一個(gè)報(bào)表工具的時(shí)候,設(shè)計(jì)了一套API,后來(lái)他的客戶要求他的API支持sql語(yǔ)句,他直接借助于mSQL(當(dāng)時(shí)比較牛)的代碼,將它集成到自己的存儲(chǔ)引擎中。但是他總是感覺不滿意,萌生了要自己做一套數(shù)據(jù)庫(kù)的想法。一到1996年,MySQL 1.0發(fā)布,僅僅過(guò)了幾個(gè)月的時(shí)間,1996年10月MySQL 3.11.1當(dāng)時(shí)發(fā)布了Solaris的版本,一個(gè)月后,linux的版本誕生,從那時(shí)候開始,MySQL慢慢的被人所接受。1999年,Michael Widenius成立了MySQL AB公司,MySQL由個(gè)人開發(fā)轉(zhuǎn)變?yōu)閳F(tuán)隊(duì)開發(fā),2000年使用GPL協(xié)議開源。2001年,MySQL生命中的大事發(fā)生了,那就是存儲(chǔ)引擎InnoDB的誕生!直到現(xiàn)在,MySQL可以選擇的存儲(chǔ)引擎,InnoDB依然是No.1。2008年1月,MySQL AB公司被Sun公司以10億美金收購(gòu),MySQL數(shù)據(jù)庫(kù)進(jìn)入Sun時(shí)代。Sun為MySQL的發(fā)展提供了絕佳的環(huán)境,2008年11月,MySQL 5.1發(fā)布,MySQL成為了最受歡迎的小型數(shù)據(jù)庫(kù)。在此之前,Oracle在2005年就收購(gòu)了InnoDB,因此,InnoDB一直以來(lái)都只能作為第三方插件供用戶選擇。2009年4月,Oracle公司以74億美元收購(gòu)Sun公司,MySQL也隨之進(jìn)入Oracle時(shí)代。2010年12月,MySQL 5.5發(fā)布,Oracle終于把InnoDB做成了MySQL默認(rèn)的存儲(chǔ)引擎,MySQL從此進(jìn)入了輝煌時(shí)代。然而,從那之后,Oracle對(duì)MySQL的態(tài)度漸漸發(fā)生了變化,Oracle雖然宣稱MySQL依然尊少GPL協(xié)議,但卻暗地里把開發(fā)人員全部換成了Oracle自己人,開源社區(qū)再也影響不了MySQL發(fā)展的腳步,真正有心做貢獻(xiàn)的人也被拒之門外,MySQL隨時(shí)都有閉源的可能……

          橫空出世的MariaDB是什么鬼

          先提一下MySQL名字的由來(lái)吧,Michael Widenius的女兒的簡(jiǎn)稱就是MY,Michael Widenius大概也是把MySQL當(dāng)成自己的女兒吧??粗约盒量囵B(yǎng)大的MySQL被Oracle搞成這樣,Michael Widenius非常失望,決定在MySQL走向閉源前,將MySQL進(jìn)行分支化,依然是使用了自己女兒的名字MariaDB(瑪莉亞DB)。MariaDB數(shù)據(jù)庫(kù)管理系統(tǒng)是MySQL的一個(gè)分支,主要由開源社區(qū)在維護(hù),采用GPL授權(quán)許可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品。在存儲(chǔ)引擎方面,使用XtraDB來(lái)代替MySQL的InnoDB。MariaDB由MySQL的創(chuàng)始人Michael Widenius主導(dǎo),由開源社區(qū)的大神們進(jìn)行開發(fā)。因此,大家都認(rèn)為,MariaDB擁有比MySQL更純正的MySQL血脈。最初的版本更新與MySQL同步,相對(duì)MySQL5以后的版本,MariaDB也有相應(yīng)的5.1~5.5的版本。后來(lái)MariaDB終于擺脫了MySQL,它的版本號(hào)直接從10.0開始,以自己的步伐進(jìn)行開發(fā),當(dāng)然,還是可以對(duì)MySQL完全兼容。現(xiàn)在,MariaDB的數(shù)據(jù)特性、性能等都超越了MySQL。

          測(cè)試環(huán)境

          本性能測(cè)試環(huán)境如下:

          • CPU:I7

          • 內(nèi)存:8G

          • OS:Windows 10 64位

          • 硬盤類型:SSD

          • MySQL:8.0.19

          • MariaDB:10.4.12

          分別在MySQl和MariaDB中創(chuàng)建名為performance的數(shù)據(jù)庫(kù),并創(chuàng)建log表,都使用innodb作為數(shù)據(jù)庫(kù)引擎:

          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;

          插入性能

          單條插入

          單條插入的測(cè)試結(jié)果如下表所示:

          MariaDB單條數(shù)據(jù)插入的性能比MySQL強(qiáng)1倍左右。

          批量插入

          批量插入的測(cè)試結(jié)果如下表所示:

          上面的測(cè)試結(jié)果,MariaDB并沒有絕對(duì)優(yōu)勢(shì),甚至有時(shí)還比MySQL慢,但平均水平還是高于MySQL。

          查詢性能

          經(jīng)過(guò)了多次插入測(cè)試,我兩個(gè)數(shù)據(jù)庫(kù)里插入了很多數(shù)據(jù),此時(shí)用下面的sql查詢表中的數(shù)據(jù)量:

          1. SELECT COUNT(0) FROM LOG

          結(jié)果兩個(gè)表都是6785000條,MariaDB用時(shí)3.065秒,MySQL用時(shí)6.404秒。此時(shí)我機(jī)器的內(nèi)存用了6個(gè)G,MariaDB用了474284 K,MySQL只用了66848 K??磥?lái)MariaDB快是犧牲了空間換取的。

          無(wú)索引

          先查詢一下time字段的最大值和最小值:

          1. SELECT MAX(TIME), MIN(TIME) FROM LOG

          MariaDB用時(shí)6.333秒,MySQL用時(shí)8.159秒。接下來(lái)測(cè)試過(guò)濾time字段在0點(diǎn)到1點(diǎn)之間的數(shù)據(jù),并對(duì)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用時(shí)6.996秒,MySQL用時(shí)10.193秒。然后測(cè)試查詢level字符是info的數(shù)據(jù):

          1. SELECT * FROM LOG WHERE LEVEL = 'info'

          MariaDB用時(shí)0.006秒,MySQL用時(shí)0.049秒。最后測(cè)試查詢message字段值為debug的數(shù)據(jù):

          1. SELECT * FROM LOG WHERE MESSAGE = 'debug'

          MariaDB用時(shí)0.003秒,MySQL用時(shí)0.004秒。

          有索引

          分別對(duì)兩個(gè)數(shù)據(jù)庫(kù)的字段創(chuàng)建索引:

          1. ALTER TABLE `performance`.`log`  

          2.  ADD  INDEX `time`(`time`),

          3.  ADD  INDEX `level`(`level`),

          4.  ADD FULLTEXT INDEX `message`(`message`);

          MariaDB用時(shí)2分47秒,MySQL用時(shí)3分48秒。再用上面的測(cè)試項(xiàng)目進(jìn)行測(cè)試,結(jié)果如下表所示:

          有些結(jié)果添加了索引后還不如不加索引時(shí)理想,說(shuō)明實(shí)際使用時(shí)并不是每個(gè)字段都需要添加索引的。

          總結(jié)

          在上面的測(cè)試中MariaDB的性能的確優(yōu)于MySQL,看來(lái)各大廠商放棄MySQL擁抱MariaDB還是非常有道理的。


          往期推薦:

          推薦一套超高顏值的 Spring Boot 快速開發(fā)框架【文末送書】

          微信 | QQ 防撤回,支持電腦端和手機(jī)端,再也不會(huì)錯(cuò)過(guò)“精彩”內(nèi)容了

          請(qǐng)馬上卸載Notepad++...!

          一些惡心的代碼片段


          瀏覽 58
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  xxxx国产 | 精品人人| 久久99精品久久久久久草莓 | 日本特黄A片 | 激情丁香六月 |