MySQL 引擎
一、存儲引擎簡介
(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 引擎讀取速度較快,占用資源相對較少,不支持事務,不支持外鍵約束,但支持全文索引
(4) MyISAM 引擎只能緩存索引,而不能緩存數據
MyISAM 適用場景:
(1) 不需要事務支持的業務,例如轉賬就不行
(2) 適用於讀數據比較多的業務,不適用於讀寫頻繁的業務
(3) 並發相對較低、數據修改相對較少的業務
(4) 硬件資源比較差的機器可以考慮使用 MyISAM 引擎
InnoDB 存儲引擎特點:
(1) 事務型數據庫的首選引擎,支持事務安全表,支持行鎖定和外鍵,MySQL 5.5.5 版本之後,InnoDB 作為默認存儲引擎
(2) 具有提交、回滾和崩潰恢復能力的事務安全存儲引擎,能處理巨大數據量,性能及效率高,完全支持外鍵完整性約束
(4) 使用 InnoDB 時,將在 MySQL 數據目錄下創建一個名為 ibdata1 的 10MB 大小的自動擴展數據文件,以及兩個名為 ib_logfile0 和 ib_logfile1 的 5MB 大小的日誌文件
InnoDB 適用場景:
(1) 需要事務支持的業務、高並發的業務
(2) 數據更新較為頻繁的場景,比如 BBS、SNS、微博等
(3) 數據一致性要求較高的業務,比如充值轉賬、銀行卡轉賬
Memory 存儲引擎特點:
(1) Memory 存儲引擎將表中的數據存儲到內存中,為查詢和引用其他表數據提供快速訪問
(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 引擎