mysql的innodb和myisam的區(qū)別及說(shuō)明
mysql的innodb和myisam的區(qū)別
InnoDB和MyISAM都是MySQL數(shù)據(jù)庫(kù)中常見(jiàn)的存儲(chǔ)引擎,它們各有特點(diǎn):
InnoDB
- 事務(wù)支持:InnoDB 是支持事務(wù)的存儲(chǔ)引擎,可以使用提交(commit)和回滾(rollback)來(lái)保證數(shù)據(jù)的完整性。
- 行級(jí)鎖定:InnoDB 使用行級(jí)鎖定(row-level locking),這意味著在操作數(shù)據(jù)時(shí)只會(huì)鎖定需要修改的行,而不是整個(gè)表,有助于提高并發(fā)性能。
- 外鍵約束:InnoDB 支持外鍵約束,可以確保數(shù)據(jù)的完整性,保證參照完整性。
- 崩潰恢復(fù):InnoDB 提供了崩潰恢復(fù)功能,可以自動(dòng)進(jìn)行恢復(fù),保證數(shù)據(jù)的一致性。
MyISAM
- 全文搜索:MyISAM 對(duì)全文搜索功能支持較好,適合用于需要頻繁進(jìn)行全文搜索的場(chǎng)景。
- 表級(jí)鎖定:MyISAM 使用表級(jí)鎖定(table-level locking),這意味著在操作數(shù)據(jù)時(shí)會(huì)鎖定整個(gè)表,可能導(dǎo)致并發(fā)性能較差。
- 不支持事務(wù):MyISAM 不支持事務(wù)處理,因此無(wú)法使用提交和回滾等操作來(lái)維護(hù)數(shù)據(jù)的完整性。
- 不支持外鍵:MyISAM 不支持外鍵約束,需要在應(yīng)用層面去維護(hù)數(shù)據(jù)的一致性。
選擇存儲(chǔ)引擎取決于具體的業(yè)務(wù)需求。如果需要事務(wù)支持、行級(jí)鎖定和數(shù)據(jù)完整性,通常會(huì)選擇InnoDB。
如果對(duì)全文搜索有很高的要求,并且不需要事務(wù)支持,可以選擇MyISAM。
在實(shí)際應(yīng)用中,也可以根據(jù)具體的場(chǎng)景靈活選擇不同的存儲(chǔ)引擎以獲得最佳性能。
mysql innodb和myisam對(duì)和適用場(chǎng)景
InnoDB和MyISAM對(duì)比
1)事務(wù)和外鍵
- InnoDB支持事務(wù)和外鍵,具有安全性和完整性,適合大量insert或update操作
- MyISAM不支持事務(wù)和外鍵,它提供高速存儲(chǔ)和檢索,適合大量的select查詢(xún)操作
2)鎖機(jī)制
- InnoDB支持行級(jí)鎖,鎖定指定記錄?;谒饕齺?lái)加鎖實(shí)現(xiàn)
- MyISAM支持表級(jí)鎖,鎖定整張表
3)索引結(jié)構(gòu)
- InnoDB使用聚集索引(聚簇索引),索引和記錄在一起存儲(chǔ),既緩存索引,也緩存記錄
- MyISAM使用非聚集索引(非聚簇索引),索引和記錄分開(kāi)
4)并發(fā)處理能力
- MyISAM使用表鎖,會(huì)導(dǎo)致寫(xiě)操作并發(fā)率低,讀之間并不阻塞,讀寫(xiě)阻塞
- InnoDB讀寫(xiě)阻塞可以與隔離級(jí)別有關(guān),可以采用多版本并發(fā)控制(MVCC)來(lái)支持高并發(fā)
5)存儲(chǔ)文件
- InnoDB表對(duì)應(yīng)兩個(gè)文件,一個(gè).frm表結(jié)構(gòu)文件,一個(gè).ibd數(shù)據(jù)文件, InnoDB表最大支持64TB
- MyISAM表對(duì)應(yīng)三個(gè)文件,一個(gè).frm表結(jié)構(gòu)文件,一個(gè)MYD表數(shù)據(jù)文件,一個(gè).MYI索引文件。從 MySQL5.0開(kāi)始默認(rèn)限制是256TB
適用場(chǎng)景
1)MyISAM
- 不需要事務(wù)支持(不支持)
- 并發(fā)相對(duì)較低(鎖定機(jī)制問(wèn)題)
- 數(shù)據(jù)修改相對(duì)較少,以讀為主
- 數(shù)據(jù)一致性要求不高
2)InnoDB
- 需要事務(wù)支持(具有較好的事務(wù)特性)
- 行級(jí)鎖定對(duì)高并發(fā)有很好的適應(yīng)能力
- 數(shù)據(jù)更新較為頻繁的場(chǎng)景
- 數(shù)據(jù)一致性要求較高
- 硬件設(shè)備內(nèi)存較大,可以利用InnoDB較好的緩存能力來(lái)提高內(nèi)存利用率,減少磁盤(pán)IO
心得
- 兩種引擎該如何選擇?
- 是否需要事務(wù)?有,InnoDB
- 是否存在并發(fā)修改?有,InnoDB
- 是否追求快速查詢(xún),且數(shù)據(jù)修改少?是,MyISAM
- 在絕大多數(shù)情況下,推薦使用InnoDB
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL優(yōu)化之表結(jié)構(gòu)優(yōu)化的5大建議(數(shù)據(jù)類(lèi)型選擇講的很好)
很多人都將 數(shù)據(jù)庫(kù)設(shè)計(jì)范式 作為數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì)“圣經(jīng)”,認(rèn)為只要按照這個(gè)范式需求設(shè)計(jì),就能讓設(shè)計(jì)出來(lái)的表結(jié)構(gòu)足夠優(yōu)化,既能保證性能優(yōu)異同時(shí)還能滿(mǎn)足擴(kuò)展性要求2014-03-03mysql設(shè)置更改root密碼、mysql服務(wù)器的連接、mysql常用命令的圖解
這篇文章主要介紹了mysql設(shè)置更改root密碼、mysql服務(wù)器的連接、mysql常用命令,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06Mysql外鍵設(shè)置中的CASCADE、NO ACTION、RESTRICT、SET NULL
本文主要介紹了Mysql外鍵設(shè)置中的CASCADE、NO ACTION、RESTRICT、SET NULL,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07MySQL數(shù)據(jù)庫(kù)開(kāi)啟、關(guān)閉、查看函數(shù)功能的方法
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)開(kāi)啟、關(guān)閉、查看函數(shù)功能的方法,本文為解決一個(gè)錯(cuò)誤總結(jié)而來(lái),錯(cuò)誤信息本文一同給出,需要的朋友可以參考下2014-10-10mysql自動(dòng)增量備份的實(shí)例方法(本地備份與遠(yuǎn)程備份)
mysql自動(dòng)增量備份的例子(本地備份與遠(yuǎn)程備份),有需要的朋友可以參考下2013-02-02