数据库的两种引擎Innodb和MyIASM
?
Innodb引擎
Innodb引擎提供了對數(shù)據(jù)庫ACID事務(wù)的支持,并且實現(xiàn)了SQL標準的四種隔離級別,關(guān)于數(shù)據(jù)庫事務(wù)與其隔離級別的內(nèi)容請見數(shù)據(jù)庫事務(wù)與其隔 離級別這篇文章。該引擎還提供了行級鎖和外鍵約束,它的設(shè)計目標是處理大容量數(shù)據(jù)庫系統(tǒng),它本身其實就是基于MySQL后臺的完整數(shù)據(jù)庫系統(tǒng),MySQL 運行時Innodb會在內(nèi)存中建立緩沖池,用于緩沖數(shù)據(jù)和索引。但是該引擎不支持FULLTEXT類型的索引,而且它沒有保存表的行數(shù),當(dāng)SELECT COUNT(*) FROM TABLE時需要掃描全表。當(dāng)需要使用數(shù)據(jù)庫事務(wù)時,該引擎當(dāng)然是首選。由于鎖的粒度更小,寫操作不會鎖定全表,所以在并發(fā)較高時,使用Innodb引擎 會提升效率。但是使用行級鎖也不是絕對的,如果在執(zhí)行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表。
MyIASM引擎
MyIASM是MySQL默認的引擎,但是它沒有提供對數(shù)據(jù)庫事務(wù)的支持,也不支持行級鎖和外鍵,因此當(dāng)INSERT(插入)或UPDATE(更 新)數(shù)據(jù)時即寫操作需要鎖定整個表,效率便會低一些。不過和Innodb不同,MyIASM中存儲了表的行數(shù),于是SELECT COUNT(*) FROM TABLE時只需要直接讀取已經(jīng)保存好的值而不需要進行全表掃描。如果表的讀操作遠遠多于寫操作且不需要數(shù)據(jù)庫事務(wù)的支持,那么MyIASM也是很好的選 擇。
兩種引擎的選擇
大尺寸的數(shù)據(jù)集趨向于選擇InnoDB引擎,因為它支持事務(wù)處理和故障恢復(fù)。數(shù)據(jù)庫的大小決定了故障恢復(fù)的時間長短,InnoDB可以利用事務(wù)日志 進行數(shù)據(jù)恢復(fù),這會比較快。主鍵查詢在InnoDB引擎下也會相當(dāng)快,不過需要注意的是如果主鍵太長也會導(dǎo)致性能問題,關(guān)于這個問題我會在下文中講到。大 批的INSERT語句(在每個INSERT語句中寫入多行,批量插入)在MyISAM下會快一些,但是UPDATE語句在InnoDB下則會更快一些,尤 其是在并發(fā)量大的時候。
轉(zhuǎn)載于:https://www.cnblogs.com/originate918/p/6526399.html
總結(jié)
以上是生活随笔為你收集整理的数据库的两种引擎Innodb和MyIASM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tensorflow实现多层感知函数逼近
- 下一篇: SQLServer—端口概念