<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 吊打...

          共 3080字,需瀏覽 7分鐘

           ·

          2021-02-09 19:02



          MySQL的發(fā)展史

          MySQL的歷史可以追溯到1979年,它的創(chuàng)始人叫作Michael Widenius,他在開發(fā)一個報表工具的時候,設(shè)計了一套API,后來他的客戶要求他的API支持sql語句,他直接借助于mSQL(當(dāng)時比較牛)的代碼,將它集成到自己的存儲引擎中。

          但是他總是感覺不滿意,萌生了要自己做一套數(shù)據(jù)庫的想法。

          一到1996年,MySQL 1.0發(fā)布,僅僅過了幾個月的時間,1996年10月MySQL 3.11.1當(dāng)時發(fā)布了Solaris的版本,一個月后,linux的版本誕生,從那時候開始,MySQL慢慢的被人所接受。?

          1999年,Michael Widenius成立了MySQL AB公司,MySQL由個人開發(fā)轉(zhuǎn)變?yōu)閳F隊開發(fā),2000年使用GPL協(xié)議開源。

          2001年,MySQL生命中的大事發(fā)生了,那就是存儲引擎InnoDB的誕生!直到現(xiàn)在,MySQL可以選擇的存儲引擎,InnoDB依然是No.1。

          2008年1月,MySQL AB公司被Sun公司以10億美金收購,MySQL數(shù)據(jù)庫進入Sun時代。Sun為MySQL的發(fā)展提供了絕佳的環(huán)境,2008年11月,MySQL 5.1發(fā)布,MySQL成為了最受歡迎的小型數(shù)據(jù)庫。

          在此之前,Oracle在2005年就收購了InnoDB,因此,InnoDB一直以來都只能作為第三方插件供用戶選擇。

          2009年4月,Oracle公司以74億美元收購Sun公司,MySQL也隨之進入Oracle時代。

          2010年12月,MySQL 5.5發(fā)布,Oracle終于把InnoDB做成了MySQL默認(rèn)的存儲引擎,MySQL從此進入了輝煌時代。

          然而,從那之后,Oracle對MySQL的態(tài)度漸漸發(fā)生了變化,Oracle雖然宣稱MySQL依然尊少GPL協(xié)議,但卻暗地里把開發(fā)人員全部換成了Oracle自己人,開源社區(qū)再也影響不了MySQL發(fā)展的腳步,真正有心做貢獻的人也被拒之門外,MySQL隨時都有閉源的可能……

          橫空出世的MariaDB是什么鬼

          先提一下MySQL名字的由來吧,Michael Widenius的女兒的簡稱就是MY,Michael Widenius大概也是把MySQL當(dāng)成自己的女兒吧。

          看著自己辛苦養(yǎng)大的MySQL被Oracle搞成這樣,Michael Widenius非常失望,決定在MySQL走向閉源前,將MySQL進行分支化,依然是使用了自己女兒的名字MariaDB(瑪莉亞DB)。?

          MariaDB數(shù)據(jù)庫管理系統(tǒng)是MySQL的一個分支,主要由開源社區(qū)在維護,采用GPL授權(quán)許可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品。

          在存儲引擎方面,使用XtraDB來代替MySQL的InnoDB。?

          MariaDB由MySQL的創(chuàng)始人Michael Widenius主導(dǎo),由開源社區(qū)的大神們進行開發(fā)。因此,大家都認(rèn)為,MariaDB擁有比MySQL更純正的MySQL血脈。

          最初的版本更新與MySQL同步,相對MySQL5以后的版本,MariaDB也有相應(yīng)的5.1~5.5的版本。后來MariaDB終于擺脫了MySQL,它的版本號直接從10.0開始,以自己的步伐進行開發(fā),當(dāng)然,還是可以對MySQL完全兼容。

          現(xiàn)在,MariaDB的數(shù)據(jù)特性、性能等都超越了MySQL。

          測試環(huán)境

          本性能測試環(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ù)庫,并創(chuàng)建log表,都使用innodb作為數(shù)據(jù)庫引擎:

          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;

          插入性能

          單條插入

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

          條數(shù)\數(shù)據(jù)庫MySQLMariaDB
          10000:00:04.3972700:00:02.534988
          20000:00:09.8399360:00:04.822289
          30000:00:15.9348430:00:07.295792
          40000:00:20.3565830:00:08.895680
          50000:00:23.7353970:00:10.766463
          60000:00:31.4312340:00:16.583214
          70000:00:36.4132970:00:17.359391
          80000:00:40.9572550:00:18.281750
          90000:00:47.1251310:00:21.483223
          100000:00:54.9792440:00:24.445878
          平均0:00:00.0051850:00:00.002409

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

          批量插入

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

          條數(shù)\數(shù)據(jù)庫MySQLMariaDB
          10000:00:00.0669780:00:00.019711
          20000:00:00.0867680:00:00.038898
          30000:00:00.1326410:00:00.084769
          40000:00:00.1007730:00:00.058774
          50000:00:00.1196640:00:00.178519
          60000:00:00.3134000:00:00.143641
          70000:00:00.1815700:00:00.251319
          80000:00:00.2952060:00:00.145611
          90000:00:00.3211400:00:00.124668
          100000:00:00.3281250:00:00.181082
          平均0:00:00.0000350:00:00.000022

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

          查詢性能

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

          SELECT?COUNT(0)?FROM?LOG

          結(jié)果兩個表都是6785000條,MariaDB用時3.065秒,MySQL用時6.404秒。此時我機器的內(nèi)存用了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點之間的數(shù)據(jù),并對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的數(shù)據(jù):

          SELECT?*?FROM?LOG?WHERE?LEVEL?=?'info'

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

          SELECT?*?FROM?LOG?WHERE?MESSAGE?=?'debug'

          MariaDB用時0.003秒,MySQL用時0.004秒。

          有索引

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

          ALTER?TABLE?`performance`.`log`
          ????ADD??INDEX?`time`?(`time`),
          ??ADD??INDEX?`level`?(`level`),
          ??ADD?FULLTEXT?INDEX?`message`?(`message`);

          MariaDB用時2分47秒,MySQL用時3分48秒。再用上面的測試項目進行測試,結(jié)果如下表所示:

          項目\數(shù)據(jù)庫MySQLMariaDB
          查詢time字段最值0.006秒0.001秒
          過濾time字段并排序0.398秒0.020秒
          查詢level字段0.065秒0.049秒
          查詢message字段0.003秒0.005秒

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

          總結(jié)

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


          作者:swanmy
          本文鏈接:https://blog.csdn.net/zhmh326/article/details/104168710





          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  日韩成人AV电影 | 新乱伦三级 | 中文字幕在线视频一区 | 天堂中文在线a | 久久大香蕉伊人一区二区 |