文章來自:PHP開源社群
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;
插入效能
單條插入
單條插入的測試結果如下表所示: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
還是非常有道理的。
本作品採用《CC 協議》,轉載必須註明作者和本文連結