淺談一下MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別
前言
MyISAM和InnoDB是使用MySQL最常用的兩種存儲(chǔ)引擎,在5.5版本之前默認(rèn)采用MyISAM存儲(chǔ)引擎,從5.5開始采用InnoDB存儲(chǔ)引擎。
存儲(chǔ)引擎
存儲(chǔ)引擎是:數(shù)據(jù)庫管理系統(tǒng)如何存儲(chǔ)數(shù)據(jù)、如何為存儲(chǔ)的數(shù)據(jù)建立索引和如何更新、查詢數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方法。
MySQL的核心就是插件式存儲(chǔ)引擎,支持多種存儲(chǔ)引擎。
show engines; //查看存儲(chǔ)引擎
關(guān)于數(shù)據(jù)庫的大致架構(gòu)和基礎(chǔ)操作,這里不過多介紹;
區(qū)別
說區(qū)別之前說一下他倆的索引底層都是BTREE+ , B+樹的數(shù)據(jù)結(jié)構(gòu)維護(hù)索引和數(shù)據(jù)(m是非聚簇索引,i是聚簇索引,這點(diǎn)注意下)
事務(wù)
- InnoDB支持事務(wù),具有安全性和完整性,系統(tǒng)容災(zāi)性強(qiáng),且通過使用多版本并發(fā)控制MVCC來獲得高并發(fā)性;
- MyISAM不支持事務(wù); 系統(tǒng)容災(zāi)性弱;
外鍵
- InnoDB支持外鍵
- MyISAM不支持外鍵
因此把一個(gè)有外鍵的InnoDB表單轉(zhuǎn)換成MyISAM表單會(huì)失敗;
表單的存儲(chǔ)
通過使用不同存儲(chǔ)引擎建立表單查看生成的對(duì)應(yīng)存儲(chǔ)文件,發(fā)現(xiàn)除了雙方共有的 .frm存儲(chǔ)表屬性外:
- InnoDB存儲(chǔ)引擎表單獨(dú)存放到一個(gè)獨(dú)立的IBD文件中;(索引和數(shù)據(jù)放在了一起)–>聚簇索引–>通過主鍵索引效率高; 普通鍵進(jìn)行索引可能需要回表;
- MyISAM存儲(chǔ)引擎表單由MYD和MYI兩部分組成,其中MYD(MYData)用來存放數(shù)據(jù)文件,而MYI(MYIndex)則用來存放索引文件–>非聚簇索引–>數(shù)據(jù)存放的是指針,不需要回表,主鍵索引和普通鍵索引分開了;
數(shù)據(jù)查詢效率
- InnoDB不支持全文索引,而 MyISAM 支持全文索引,查詢效率上 MyISAM更高;
- InnoDB不保存表的具體行數(shù),執(zhí)行 select count(*) from table 時(shí)需要全表掃描。而 MyISAM 用一個(gè)變量保存了整個(gè)表的行數(shù),執(zhí)行上述語句時(shí)只需要讀出該變量即可,速度很快;
數(shù)據(jù)更新效率
InnoDB的內(nèi)部優(yōu)化,包括**磁盤預(yù)讀(**從磁盤讀取數(shù)據(jù)時(shí)采用可預(yù)測性讀取),自適應(yīng)哈希(自動(dòng)在內(nèi)存中創(chuàng)建hash索引以加速讀操作)等, 且能夠加速插入操作的插入緩沖區(qū)。所以比MyISAM在數(shù)據(jù)更新能力上更優(yōu);
如何選擇
- 看設(shè)計(jì)的業(yè)務(wù)是否需要支持事務(wù),需要–InnoDB;不需要–MyISAM;
- 如果select讀操作頻繁,用MyISAM; 如果數(shù)據(jù)更新操作使用頻繁操作用InnoDB;
- 考慮系統(tǒng)容災(zāi)能力,MyISAM更不容易恢復(fù),InnoDB容易恢復(fù);
既然MySQL5.5版本之后默認(rèn)了InnoDB,不知道用什么那就InnoDB,跟著主流走不會(huì)錯(cuò);
到此這篇關(guān)于淺談一下MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別的文章就介紹到這了,更多相關(guān)MyISAM和InnoDB存儲(chǔ)引擎內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL多表查詢與7種JOINS的實(shí)現(xiàn)舉例
最近學(xué)習(xí)了多表查詢,對(duì)此做一些筆記的整理,下面這篇文章主要給大家介紹了關(guān)于MySQL多表查詢與7種JOINS實(shí)現(xiàn)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02MySQL中的insert set 和 insert values用法
這篇文章主要介紹了MySQL中的insert set 和 insert values用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08MySQL?去除字符串中的括號(hào)以及括號(hào)里的所有內(nèi)容
這篇文章主要介紹了MySQL?去除字符串中的括號(hào)以及括號(hào)里的所有內(nèi)容,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08MySQL數(shù)據(jù)庫三種常用存儲(chǔ)引擎特性對(duì)比
MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲(chǔ)在文件(或內(nèi)存)中,這些技術(shù)中的每一種技術(shù)都使用不同的存儲(chǔ)機(jī)制,索引技巧,鎖定水平并且最終提供廣泛的不同功能和能力。在MySQL中將這些不同的技術(shù)及配套的相關(guān)功能稱為存儲(chǔ)引擎。2016-01-01