文章詳情頁
淺談一下MyISAM和InnoDB存儲引擎的區別
瀏覽:216日期:2023-05-05 10:11:59
目錄
- 前言
- 存儲引擎
- 區別
- 事務
- 外鍵
- 表單的存儲
- 數據查詢效率
- 數據更新效率
- 如何選擇
前言
MyISAM和InnoDB是使用MySQL最常用的兩種存儲引擎,在5.5版本之前默認采用MyISAM存儲引擎,從5.5開始采用InnoDB存儲引擎。
存儲引擎
存儲引擎是:數據庫管理系統如何存儲數據、如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現方法。
MySQL的核心就是插件式存儲引擎,支持多種存儲引擎。
show engines; //查看存儲引擎
關于數據庫的大致架構和基礎操作,這里不過多介紹;
區別
說區別之前說一下他倆的索引底層都是BTREE+ , B+樹的數據結構維護索引和數據(m是非聚簇索引,i是聚簇索引,這點注意下)
事務
- InnoDB支持事務,具有安全性和完整性,系統容災性強,且通過使用多版本并發控制MVCC來獲得高并發性;
- MyISAM不支持事務; 系統容災性弱;
外鍵
- InnoDB支持外鍵
- MyISAM不支持外鍵
因此把一個有外鍵的InnoDB表單轉換成MyISAM表單會失敗;
表單的存儲
通過使用不同存儲引擎建立表單查看生成的對應存儲文件,發現除了雙方共有的 .frm存儲表屬性外:
- InnoDB存儲引擎表單獨存放到一個獨立的IBD文件中;(索引和數據放在了一起)–>聚簇索引–>通過主鍵索引效率高; 普通鍵進行索引可能需要回表;
- MyISAM存儲引擎表單由MYD和MYI兩部分組成,其中MYD(MYData)用來存放數據文件,而MYI(MYIndex)則用來存放索引文件–>非聚簇索引–>數據存放的是指針,不需要回表,主鍵索引和普通鍵索引分開了;
數據查詢效率
- InnoDB不支持全文索引,而 MyISAM 支持全文索引,查詢效率上 MyISAM更高;
- InnoDB不保存表的具體行數,執行 select count(*) from table 時需要全表掃描。而 MyISAM 用一個變量保存了整個表的行數,執行上述語句時只需要讀出該變量即可,速度很快;
數據更新效率
InnoDB的內部優化,包括**磁盤預讀(**從磁盤讀取數據時采用可預測性讀取),自適應哈希(自動在內存中創建hash索引以加速讀操作)等, 且能夠加速插入操作的插入緩沖區。所以比MyISAM在數據更新能力上更優;
如何選擇
- 看設計的業務是否需要支持事務,需要–InnoDB;不需要–MyISAM;
- 如果select讀操作頻繁,用MyISAM; 如果數據更新操作使用頻繁操作用InnoDB;
- 考慮系統容災能力,MyISAM更不容易恢復,InnoDB容易恢復;
既然MySQL5.5版本之后默認了InnoDB,不知道用什么那就InnoDB,跟著主流走不會錯;
到此這篇關于淺談一下MyISAM和InnoDB存儲引擎的區別的文章就介紹到這了,更多相關MyISAM和InnoDB存儲引擎內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
標簽:
MySQL
上一條:MySQL之索引結構解讀下一條:關于SQL的cast()函數解析
相關文章:
排行榜