1. 程式人生 > >MySQL 引擎

MySQL 引擎

微博 空間大小 style 業務 archive 簡介 tex 實現 存儲機制

一、存儲引擎簡介

(1) 存儲引擎說白了就是數據存儲的格式,不同的存儲引擎功能不同,占用的空間大小不同,讀取性能也不同
(2) 數據庫存儲引擎是數據庫底層軟件組件,不同的存儲引擎提供不同的存儲機制
(3) 在 MySQL 中,不需要在整個服務器中使用同一種存儲引擎,可以對每一個表使用不同的存儲引擎
(4) MySQL 支持多種存儲引擎,如 InnoDB 、MyISAM 、Memory 、Merge 、Archive 、CSV 、Federated 等等

MyISAM 存儲引擎特點:

(1) MySQL 5.5 之前使用 MyISAM 引擎,MySQL 5.5 之後使用 InnoDB 引擎
(2) MyISAM 引擎讀取速度較快,占用資源相對較少,不支持事務,不支持外鍵約束,但支持全文索引

(3) 讀寫互相阻塞,也就是說讀數據的時候你就不能寫數據,寫數據的時候你就不能讀數據
(4) MyISAM 引擎只能緩存索引,而不能緩存數據

MyISAM 適用場景:

(1) 不需要事務支持的業務,例如轉賬就不行
(2) 適用於讀數據比較多的業務,不適用於讀寫頻繁的業務
(3) 並發相對較低、數據修改相對較少的業務
(4) 硬件資源比較差的機器可以考慮使用 MyISAM 引擎

InnoDB 存儲引擎特點:

(1) 事務型數據庫的首選引擎,支持事務安全表,支持行鎖定和外鍵,MySQL 5.5.5 版本之後,InnoDB 作為默認存儲引擎
(2) 具有提交、回滾和崩潰恢復能力的事務安全存儲引擎,能處理巨大數據量,性能及效率高,完全支持外鍵完整性約束

(3) 具有非常高效的緩存特性,能緩存索引也能緩存數據,對硬件要求比較高
(4) 使用 InnoDB 時,將在 MySQL 數據目錄下創建一個名為 ibdata1 的 10MB 大小的自動擴展數據文件,以及兩個名為 ib_logfile0 和 ib_logfile1 的 5MB 大小的日誌文件

InnoDB 適用場景:

(1) 需要事務支持的業務、高並發的業務
(2) 數據更新較為頻繁的場景,比如 BBS、SNS、微博等
(3) 數據一致性要求較高的業務,比如充值轉賬、銀行卡轉賬

Memory 存儲引擎特點:

(1) Memory 存儲引擎將表中的數據存儲到內存中,為查詢和引用其他表數據提供快速訪問

(2) Memory 存儲引擎執行 HASH 和 BTREE 索引,不支持 BLOB 和 TEXT 列,支持 AUTO_INCREMENT 列和對可包含 NULL 值得列的索引
(3) 當不再需要 Memory 表的內容時,要釋放被 Memory 表使用的內存,應該執行 DELETE FROM 或 TRUNCATE TABLE ,或者刪除整個表

二、存儲引擎的選擇

(1) 如果要提供提交、回滾和奔潰恢復能力的事務安全能力,並要求實現並發控制,InnoDB 是個很好的選擇
(2) 如果數據表主要用來插入和查詢記錄,則 MyISAM 引擎能提供較高的處理效率
(3) 如果只是臨時存放數據,數據量不大,並且不需要較高的安全性,可以選擇將數據保存在內存中的 Memory 引擎,MySQL 使用該引擎作為臨時表,存放查詢的中間結果
(4) 如果只有 INSERT 和 SELECT 操作,可以選擇 Archive 引擎,支持高並發的插入操作,如記錄日誌信息可以使用 Archive 引擎

功能 MyISAM Memory InnoDB Archive
存儲限制 256TB RAM 64TB None
支持事務 No No Yes No
支持全文索引 Yes No No No
支持數索引 Yes Yes Yes No
支持哈希緩存 No Yes No No
支持數據緩存 No N/A Yes No
支持外鍵 No No Yes No

MySQL 引擎