MySQL存儲引擎性能比較選擇

學習的原文地址:

https://blog.csdn.net/qushaming/article/details/82773783

關於MySQL的各個存儲引擎的特性和選擇

基本的一個思路和,MyISAM引擎比較適合單純的insert和select的系統,如果系統中不是很頻繁的update、delete的話可以考慮使用這個存儲引擎。

但是如果對 數據的一致性事務要求比較高,有較多的update需求的話,建議還是InnoDB穩妥。

引用原文的結論建議:

MyISAM:如果應用是以讀操作和插入操作爲主,只有很少的更新和刪除操作,並且對事務的完整性、併發性要求不是很高,那麼選擇該存儲引擎是非常合適的。MyISAM是在Web、數據倉庫和其他應用環境下最常使用的存儲引擎之一。

InnoDB:用於事務處理應用程序,支持外鍵。如果應用程序對事務的完整性有比較高的要求,在併發條件下要求數據的一致性,數據操作除了插入和查詢外,還包括很多的更新、刪除操作,那麼InnoDB存儲引擎是比較合適的選擇。InnoDB存儲引擎除了有效地降低由於刪除和更新導致地鎖定,還可以確保事務地完整提交(Commit)和回滾(Rollback),對於類似計費系統或者財務系統等對數據準確性要求較高地系統,InnoDB都是合適地選擇。

MEMORY:將所有數據保存在RAM中,在需要快速定位記錄和其他類似數據的環境下,可提供極快的訪問。MEMORY的缺陷是對錶的大小有限制,太大的表無法緩存在內存中,其次是要確保表的數據可以恢復,數據庫異常終止後表中的數據是可以恢復的。MEMORY表通常用於更新不太頻繁的小表,用以快速訪問結果。

MERGE:用於將一系列等同地MyISAM表以邏輯方式組合在一起,並作爲一個對象引用它們,MERGE表地優點在於可以突破對單個MyISAM表大小的限制,並且通過將不同的表分佈在多個磁盤上,可以有效地改善MERGE表的訪問效率,這對於諸如數據倉庫等VLDB環境十分適合。

如何指定存儲引擎

存儲引擎在安裝數據庫的時候有默認的設定,但是也可以單獨的表指定不同的存儲引擎。

指定數據表的存儲引擎,demo表如下,注意中間的關鍵字:ENGINE = MyISAM:


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for epa_monit_alarm_data_myisam
-- ----------------------------
DROP TABLE IF EXISTS `epa_monit_alarm_data_myisam`;
CREATE TABLE `epa_monit_alarm_data_myisam`  (
  `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '唯一`yanru_test`主鍵',
  `alarm_status` int(0) NULL DEFAULT NULL COMMENT '是否報警,爲1表示報警,爲0表示解除報警',LT NULL COMMENT '壓力/真空閥狀態(0、1、2、N)',
  `critical_pressure_state` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '壓力/真空閥臨界壓力狀態(0、1、2、N)',
  `post_processing_device_status` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '後處理裝置狀態(0、1、2、N)',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `ids_alarm_status`(`alarm_status`) USING BTREE,
  INDEX `ids_enterprise_code`(`enterprise_code`) USING BTREE,
  INDEX `ids_tanker_id`(`tanker_id`) USING BTREE,
  INDEX `ids_date`(`date`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 642 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '採集加油站數據:加油站相關的報警預警數據' ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

存儲引擎插入速度的比較測試

對於MyISAM和InnoDB兩個存儲引擎,我分別做了一些性能測試。

以插入1000條數據爲例,MyISAM的耗時佔InnoDB的96%。

MyISAM的表執行耗時 InnoDB的表執行耗時
117.117s 122.289s

插入100000條數據爲例,MyISAM的耗時佔InnoDB的99%。

MyISAM的表執行耗時 InnoDB的表執行耗時
12078.579s 12179.141s

算下來,和瞬時採樣疊加對比,

綜合比較,會發現其實,使用MyISAM的總體插入效率並沒有比InnoDB快多少!所以這兩個存儲引擎的選擇並不依賴於對數據插入速度的需求!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章