日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MariaDB数据存储引擎的选择

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MariaDB数据存储引擎的选择 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MariaDB數據存儲引擎的選擇

像MySQL一樣MariaDB,也有很多數據存儲引擎,其官方網站對每個引擎都有非常詳細的介紹。

寫這篇文章之前,我一直以為InnoDB才是王道,事實上,每種存儲引擎都有各自的特點,就像不同的編程語言一樣,沒有優劣之分,只有適用的場景不同。這里列舉幾個常用的數據存儲引擎:

引擎名稱特點
MyISAM不支持事務和外鍵,但insert和select速度非常快
AriaMyISAM存儲引擎的增強版,支持自動崩潰安全恢復
XtraDBInnoDB的增強版,支持事務處理
CSV將數據保存在CSV文件中
MEMORY將數據保存在內存中,讀寫速度快,但關閉時數據會丟失
SphinxSESphinx使用的引擎,支持數據全文檢索

作為一篇關注性能的文章,本文重點測試MyISAM、Aria和XtraDB的的性能。當然,三者只有XtraD支持事務,測試是在不使用事務的場景下進行的。

測試環境

本性能測試環境如下:

  • CPU:I7
  • 內存:8G
  • OS:Windows 10 64位
  • 硬盤類型:SSD
  • MariaDB:10.4.12

分別用三種引擎創建三張表,MariaDB為了與MySQL兼容,要使用XtraDB,還是需要指定為InnoDB。

CREATE TABLE `performance`.`log_xtradb`( `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;CREATE TABLE `performance`.`log_myisam`( `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=MYISAM CHARSET=utf8;CREATE TABLE `performance`.`log_aria`( `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=ARIA CHARSET=utf8;

插入性能

單條插入

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

條數\數據庫XtraDBMyISAMAria
10000:00:02.8196830:00:00.7120450:00:02.679292
20000:00:05.6455220:00:01.2456050:00:04.919199
30000:00:08.6407540:00:01.0070640:00:08.578473
40000:00:11.7837090:00:02.6303980:00:09.977887
50000:00:15.3123410:00:02.3408410:00:15.730704
60000:00:17.6196240:00:04.7425920:00:18.107170
70000:00:21.3302310:00:03.6284630:00:19.398530
80000:00:24.1378780:00:04.8682330:00:21.840180
90000:00:26.5586060:00:05.7017400:00:26.071422
100000:00:30.7586290:00:03.4091640:00:29.096098
平均0:00:00.0029930:00:00.0005510:00:00.002844

單條數據插入XtraDB與Aria相差不大,而MyISAM表現特別突出,比二者的速度快5倍以上。

批量插入

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

條數\數據庫XtraDBMyISAMAria
10000:00:00.0249320:00:00.0109700:00:00.015546
20000:00:00.0311660:00:00.0348860:00:00.039567
30000:00:00.0780760:00:00.0310060:00:00.062644
40000:00:00.0795110:00:00.0468630:00:00.103948
50000:00:00.0777020:00:00.0624850:00:00.094910
60000:00:00.0974920:00:00.0637650:00:00.105757
70000:00:00.0937640:00:00.0934830:00:00.143457
80000:00:00.1058300:00:00.0778840:00:00.150275
90000:00:00.1067340:00:00.0935120:00:00.187510
100000:00:00.1231750:00:00.0933670:00:00.234525
平均0:00:00.0000150:00:00.0000110:00:00.000021

即便是批量插入操作,MyISAM的性能也要比InnoDB和Aria好一些。

查詢性能

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

SELECT COUNT(0) FROM LOG_XTRADB; SELECT COUNT(0) FROM LOG_MYISAM; SELECT COUNT(0) FROM LOG_ARIA;

三個表都是11110000條數據,查詢XtraDB用時2.761秒,MyISAM和Aria都是0秒,原因是MyISAM和Aria記錄了表內的數據量,直接取出了,如果使用where條件后,三者的執行邏輯就相同了。

無索引

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

SELECT MAX(TIME), MIN(TIME) FROM LOG_XTRADB; SELECT MAX(TIME), MIN(TIME) FROM LOG_MYISAM; SELECT MAX(TIME), MIN(TIME) FROM LOG_ARIA;

XtraDB用時4.892秒,MyISAM用時3.676秒,Aria用時5.526秒。

接下來測試過濾time字段在0點到1點之間的數據,并對time字段排序:

SELECT * FROM LOG_XTRADB WHERE TIME > '2020-02-04 00:00:00' AND TIME < '2020-02-04 01:00:00' ORDER BY TIME; SELECT * FROM LOG_MYISAM WHERE TIME > '2020-02-04 00:00:00' AND TIME < '2020-02-04 01:00:00' ORDER BY TIME; SELECT * FROM LOG_ARIA WHERE TIME > '2020-02-04 00:00:00' AND TIME < '2020-02-04 01:00:00' ORDER BY TIME;

XtraDB用時5.399秒,MyISAM用時4.163秒,Aria用時5.314秒。

然后測試查詢level字符是info的數據:

SELECT * FROM LOG_XTRADB WHERE LEVEL = 'info'; SELECT * FROM LOG_MYISAM WHERE LEVEL = 'info'; SELECT * FROM LOG_ARIA WHERE LEVEL = 'info';

XtraDB用時0.099秒,MyISAM用時0.026秒,Aria用時0.028秒。
最后測試查詢message字段值為debug的數據:

SELECT * FROM LOG_XTRADB WHERE MESSAGE = 'debug'; SELECT * FROM LOG_MYISAM WHERE MESSAGE = 'debug'; SELECT * FROM LOG_ARIA WHERE MESSAGE = 'debug';

XtraDB用時0.025秒,MyISAM用時0.003秒,Aria用時0.003秒。

無索引的情況下,MyISAM的查詢性能比XtraDB能好上不少。

有索引

分別對三個表中的每個字段創建索引:

ALTER TABLE `performance`.`log_xtradb` ADD INDEX `time` (`time`),ADD INDEX `level` (`level`),ADD FULLTEXT INDEX `message` (`message`); ALTER TABLE `performance`.`log_myisam` ADD INDEX `time` (`time`),ADD INDEX `level` (`level`),ADD FULLTEXT INDEX `message` (`message`); ALTER TABLE `performance`.`log_aria` ADD INDEX `time` (`time`),ADD INDEX `level` (`level`),ADD FULLTEXT INDEX `message` (`message`);

XtraDB用時6分56秒,MyISAM用時4分8秒,Aria用時4分43秒。再用上面的測試項目進行測試,結果如下表所示:

項目\數據庫XtraDBMyISAMAria
查詢time字段最值0.010秒0.0020.002秒
過濾time字段并排序0.020秒0.009秒0.015秒
查詢level字段0.023秒0.010秒0.003秒
查詢message字段0.036秒0.003秒0.003秒

有索引的情況下,MyISAM的查詢性能依然比XtraDB更有優勢。

總結

不能盲目追求XtraDB的傳說。在業務過程中應該綜合考慮,對于數據量大的表,盡量使用MyISAM引擎,避免事務操作,只有對必須啟用事務的表,才選擇XtraDB作為數據存儲引擎。

總結

以上是生活随笔為你收集整理的MariaDB数据存储引擎的选择的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。