全文大約【1567】字,不說廢話,只講可以讓你學(xué)到技術(shù)、明白原理的純干貨!本文帶有豐富案例及配圖視頻,讓你更好的理解和運(yùn)用文中的技術(shù)概念,并可以給你帶來具有足夠啟迪的思考......
一. 存儲(chǔ)引擎介紹
1.什么是存儲(chǔ)引擎
數(shù)據(jù)庫最核心的一點(diǎn)就是用來存儲(chǔ)數(shù)據(jù),數(shù)據(jù)存儲(chǔ)就避免不了和磁盤打交道。那么數(shù)據(jù)以哪種方式進(jìn)行存儲(chǔ),如何存儲(chǔ)是存儲(chǔ)的關(guān)鍵所在。所以存儲(chǔ)引擎就相當(dāng)于是數(shù)據(jù)存儲(chǔ)的發(fā)動(dòng)機(jī),來驅(qū)動(dòng)數(shù)據(jù)在磁盤層面進(jìn)行存儲(chǔ)。不同的存儲(chǔ)引擎功能差別很大。各位小伙伴不要著急,下面聽小編逐一道來。
查看存儲(chǔ)引擎:
SHOW ENGINES;
2.InnoDB存儲(chǔ)引擎
特點(diǎn):
● InnoDB存儲(chǔ)引擎提供了具有提交、回滾和崩潰恢復(fù)能力的事務(wù)安全。相比較MyISAM存儲(chǔ)引擎,InnoDB寫的處理效率差一點(diǎn)并且會(huì)占用更多的磁盤空間保留數(shù)據(jù)和索引。
● 提供了對數(shù)據(jù)庫事務(wù)ACID(原子性Atomicity、一致性Consistency、隔離性Isolation、持久性Durability)的支持,實(shí)現(xiàn)了SQL標(biāo)準(zhǔn)的四種隔離級(jí)別。
● 設(shè)計(jì)目標(biāo)就是處理大容量的數(shù)據(jù)庫系統(tǒng),MySQL運(yùn)行時(shí)InnoDB會(huì)在內(nèi)存中建立緩沖池,用于緩沖數(shù)據(jù)和索引。
● 執(zhí)行“select count(*) from table”語句時(shí)需要掃描全表,因?yàn)槭褂胕nnodb引擎的表不會(huì)保存表的具體行數(shù),所以需要掃描整個(gè)表才能計(jì)算多少行。
● InnoDB引擎是行鎖,粒度更小,所以寫操作不會(huì)鎖定全表,在并發(fā)較高時(shí),使用InnoDB會(huì)提升效率。即存在大量UPDATE/INSERT操作時(shí),效率較高。
● InnoDB清空數(shù)據(jù)量大的表時(shí),是非常緩慢,這是因?yàn)镮nnoDB必須處理表中的每一行,根據(jù)InnoDB的事務(wù)設(shè)計(jì)原則,首先需要把“刪除動(dòng)作”寫入“事務(wù)日志”,然后寫入實(shí)際的表。所以,清空大表的時(shí)候,最好直接drop table然后重建。即InnoDB一行一行刪除,不會(huì)重建表。
使用場景:
● 經(jīng)常UPDETE/INSERT的表,使用處理多并發(fā)的寫請求。
● 支持事務(wù),必選InnoDB。
● 可以從災(zāi)難中恢復(fù)(日志+事務(wù)回滾)。
● 外鍵約束、列屬性AUTO_INCREMENT支持。
3.MyISAM存儲(chǔ)引擎
特點(diǎn):
● MyISAM不支持事務(wù),不支持外鍵,SELECT/INSERT為主的應(yīng)用可以使用該引擎。
● 每個(gè)MyISAM在存儲(chǔ)成3個(gè)文件,擴(kuò)展名分別是:
○ frm:存儲(chǔ)表定義(表結(jié)構(gòu)等信息)。
○ MYD(MYData),存儲(chǔ)數(shù)據(jù)。
○ MYI(MYIndex),存儲(chǔ)索引。
● 不同MyISAM表的索引文件和數(shù)據(jù)文件可以放置到不同的路徑下。
● MyISAM類型的表提供修復(fù)的工具,可以用CHECK TABLE語句來檢查MyISAM表健康,并用REPAIR TABLE語句修復(fù)一個(gè)損壞的MyISAM表。
● 在MySQL5.6以前,只有MyISAM支持Full-text全文索引。
使用場景:
● 經(jīng)常SELECT/INSERT的表,插入不頻繁,查詢非常頻繁。
● 不支持事務(wù)。
● 做很多count 的計(jì)算。
4.MyISAM和Innodb區(qū)別
下面小編給各位小伙伴梳理下,敲黑板啦,重點(diǎn)來啦。
InnoDB和MyISAM是許多人在使用MySQL時(shí)最常用的兩個(gè)存儲(chǔ)引擎,這兩個(gè)存儲(chǔ)引擎各有優(yōu)劣,視具體應(yīng)用而定。基本的差別為:MyISAM類型不支持事務(wù)處理,而InnoDB類型支持。MyISAM類型強(qiáng)調(diào)的是性能,其執(zhí)行速度比InnoDB類型更快,而InnoDB提供事務(wù)支持已經(jīng)外部鍵等高級(jí)數(shù)據(jù)庫功能。
具體實(shí)現(xiàn)的差別:
● MyISAM是非事務(wù)安全型的,而InnoDB是事務(wù)安全型的。
● MyISAM鎖的粒度是表級(jí),而InnoDB支持行級(jí)鎖定。
● MyISAM不支持外鍵,而InnoDB支持外鍵。
● MyISAM相對簡單,所以在效率上要優(yōu)于InnoDB,小型應(yīng)用可以考慮使用MyISAM。
● InnoDB表比MyISAM表更安全。
二. 結(jié)語
小編在這里對本文核心要點(diǎn)進(jìn)行總結(jié):
1.MySQL最常用的存儲(chǔ)引擎就是InnoDB和MyISAM這兩個(gè)引擎,所以需要各位小伙伴熟記。
2.默認(rèn)的存儲(chǔ)引擎是InnoDB支持事務(wù)、主外鍵關(guān)系。