再見,MySQL!效能被 MariaDB 吊打 ?

2021-10-22 11:56:29 字數 3204 閱讀 6546

mysql的歷史可以追溯到2023年,它的創始人叫作michael widenius,他在開發乙個報表工具的時候,設計了一套api,後來他的客戶要求他的api支援sql語句,他直接借助於msql(當時比較牛)的**,將它整合到自己的儲存引擎中。但是他總是感覺不滿意,萌生了要自己做一套資料庫的想法。一到2023年,mysql 1.0發布,僅僅過了幾個月的時間,2023年10月mysql 3.11.1當時發布了solaris的版本,乙個月後,linux的版本誕生,從那時候開始,mysql慢慢的被人所接受。

2023年,michael widenius成立了mysql ab公司,mysql由個人開發轉變為團隊開發,2023年使用gpl協議開源。2023年,mysql生命中的大事發生了,那就是儲存引擎innodb的誕生!直到現在,mysql可以選擇的儲存引擎,innodb依然是no.1。2023年1月,mysql ab公司被sun公司以10億美金收購,mysql資料庫進入sun時代。sun為mysql的發展提供了絕佳的環境,2023年11月,mysql 5.1發布,mysql成為了最受歡迎的小型資料庫。

在此之前,oracle在2023年就收購了innodb,因此,innodb一直以來都只能作為第三方外掛程式供使用者選擇。2023年4月,oracle公司以74億美元收購sun公司,mysql也隨之進入oracle時代。2023年12月,mysql 5.5發布,oracle終於把innodb做成了mysql預設的儲存引擎,mysql從此進入了輝煌時代。然而,從那之後,oracle對mysql的態度漸漸發生了變化,oracle雖然宣稱mysql依然尊少gpl協議,但卻暗地裡把開發人員全部換成了oracle自己人,開源社群再也影響不了mysql發展的腳步,真正有心做貢獻的人也被拒之門外,mysql隨時都有閉源的可能……

先提一下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。

本效能測試環境如下:

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;

單條插入

單條插入的測試結果如下表所示:

mariadb單條資料插入的效能比mysql強1倍左右。

批量插入

批量插入的測試結果如下表所示

上面的測試結果,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秒。再用上面的測試專案進行測試,結果如下表所示:

在上面的測試中mariadb的效能的確優於mysql,看來各大廠商放棄mysql擁抱mariadb還是非常有道理的。

mysql效能優化 mysql效能優化

優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...

mysql 效能拐點 MySQL效能優化

此篇文章簡單介紹mysql配置優化 修改back log back log值表示mysql的連線資料達到max connections時,有多少請求能夠被放在堆疊之中以等待其他連線釋放.如果等待連線的數量超過back log時,就不被授予連線資源.show variables like back l...

mysql 效能分析 Mysql效能分析

優化mysql資料庫效能的十個引數 1 max connections 允許的同時客戶的數量。增加該值增加 mysqld 要求的檔案描述符的數量。這個數字應該增加,否則,你將經常看到 too many connections 錯誤。預設數值是100,我把它改為1024 2 record buffer...