InnoDB是一個(gè)事務(wù)型的存儲(chǔ)引擎迎变,有行級(jí)鎖定和外鍵約束贯城。
Innodb引擎提供了對(duì)數(shù)據(jù)庫ACID事務(wù)的支持玩敏,并且實(shí)現(xiàn)了SQL標(biāo)準(zhǔn)的四種隔離級(jí)別。該引擎還提供了行級(jí)鎖和外鍵約束熬甚,它的設(shè)計(jì)目標(biāo)是處理大容量數(shù)據(jù)庫系統(tǒng)逢渔,它本身其實(shí)就是基于MySQL后臺(tái)的完整數(shù)據(jù)庫系統(tǒng),MySQL運(yùn)行時(shí)Innodb會(huì)在內(nèi)存中建立緩沖池乡括,用于緩沖數(shù)據(jù)和索引肃廓。但是該引擎不支持FULLTEXT類型的索引,而且它沒有保存表的行數(shù)诲泌,當(dāng)SELECT COUNT(*) FROM TABLE時(shí)需要掃描全表盲赊。當(dāng)需要使用數(shù)據(jù)庫事務(wù)時(shí),該引擎當(dāng)然是首選敷扫。由于鎖的粒度更小哀蘑,寫操作不會(huì)鎖定全表,所以在并發(fā)較高時(shí)葵第,使用Innodb引擎會(huì)提升效率绘迁。但是使用行級(jí)鎖也不是絕對(duì)的,如果在執(zhí)行一個(gè)SQL語句時(shí)MySQL不能確定要掃描的范圍卒密,InnoDB表同樣會(huì)鎖全表缀台。
適用場(chǎng)景:
1)經(jīng)常更新的表,適合處理多重并發(fā)的更新請(qǐng)求哮奇。
2)支持事務(wù)膛腐。
3)可以從災(zāi)難中恢復(fù)(通過bin-log日志等)。
4)外鍵約束鼎俘。只有他支持外鍵哲身。
5)支持自動(dòng)增加列屬性auto_increment。
MySQL官方對(duì)InnoDB的講解:
1)InnoDB給MySQL提供了具有提交贸伐、回滾和崩潰恢復(fù)能力的事務(wù)安全(ACID兼容)存儲(chǔ)引擎勘天。
2)InnoDB鎖定在行級(jí)并且也在SELECT語句提供一個(gè)Oracle風(fēng)格一致的非鎖定讀,這些特色增加了多用戶部署和性能捉邢。沒有在InnoDB中擴(kuò)大鎖定的需要脯丝,因?yàn)樵贗nnoDB中行級(jí)鎖定適合非常小的空間。
3)InnoDB也支持FOREIGN KEY強(qiáng)制歌逢。在SQL查詢中巾钉,你可以自由地將InnoDB類型的表與其它MySQL的表的類型混合起來翘狱,甚至在同一個(gè)查詢中也可以混合秘案。
4)InnoDB是為處理巨大數(shù)據(jù)量時(shí)的最大性能設(shè)計(jì),它的CPU效率可能是任何其它基于磁盤的關(guān)系數(shù)據(jù)庫引擎所不能匹敵的。
5) InnoDB被用來在眾多需要高性能的大型數(shù)據(jù)庫站點(diǎn)上產(chǎn)生阱高。
補(bǔ)充:什么叫事務(wù)赚导?簡(jiǎn)稱ACID
A 事務(wù)的原子性(Atomicity):指一個(gè)事務(wù)要么全部執(zhí)行,要么不執(zhí)行.也就是說一個(gè)事務(wù)不可能只執(zhí)行了一半就停止了.比如你從取款機(jī)取錢,這個(gè)事務(wù)可以分成兩個(gè)步驟:1劃卡,2出錢.不可能劃了卡,而錢卻沒出來.這兩步必須同時(shí)完成.要么就不完成.
C 事務(wù)的一致性(Consistency):指事務(wù)的運(yùn)行并不改變數(shù)據(jù)庫中數(shù)據(jù)的一致性.例如,完整性約束了a+b=10,一個(gè)事務(wù)改變了a,那么b也應(yīng)該隨之改變.
I 獨(dú)立性(Isolation):事務(wù)的獨(dú)立性也有稱作隔離性,是指兩個(gè)以上的事務(wù)不會(huì)出現(xiàn)交錯(cuò)執(zhí)行的狀態(tài).因?yàn)檫@樣可能會(huì)導(dǎo)致數(shù)據(jù)不一致.
D 持久性(Durability):事務(wù)的持久性是指事務(wù)執(zhí)行成功以后,該事務(wù)所對(duì)數(shù)據(jù)庫所作的更改便是持久的保存在數(shù)據(jù)庫之中,不會(huì)無緣無故的回滾.
(3)使用建議:
以下兩點(diǎn)必須使用?InnoDB:
1)可靠性高或者要求事務(wù)處理赤惊,則使用InnoDB吼旧。這個(gè)是必須的。
2)表更新和查詢都相當(dāng)?shù)念l繁未舟,并且表鎖定的機(jī)會(huì)比較大的情況指定InnoDB數(shù)據(jù)引擎的創(chuàng)建圈暗。
對(duì)比之下,MyISAM的使用場(chǎng)景:
1)做很多count的計(jì)算的裕膀。如一些日志员串,調(diào)查的業(yè)務(wù)表。
2)插入修改不頻繁昼扛,查詢非常頻繁的寸齐。