- 高性能MySQL(第4版)
- (美)Silvia Botros等
- 943字
- 2023-11-24 18:39:35
InnoDB引擎
InnoDB是MySQL的默認事務(wù)型存儲引擎,也是最重要、使用最廣泛的引擎。它是為處理大量短期事務(wù)而設(shè)計的,這些事務(wù)通常是正常提交的,很少會被回滾。InnoDB的性能和自動崩潰恢復(fù)特性,使得它在非事務(wù)型存儲需求中也很流行。如果想研究存儲引擎,比起花同樣時間學習所有的存儲引擎,深入研究以盡可能多地了解InnoDB是更值得的選擇。
最佳實踐是使用InnoDB存儲引擎作為所有應(yīng)用程序的默認引擎。在好幾個大版本之前,MySQL已經(jīng)將InnoDB作為默認引擎,這讓事情變得簡單了。
InnoDB是MySQL默認的通用存儲引擎。默認情況下,InnoDB將數(shù)據(jù)存儲在一系列的數(shù)據(jù)文件中,這些文件統(tǒng)被稱為表空間(tablespace)。表空間本質(zhì)上是一個由InnoDB自己管理的黑盒。
InnoDB使用MVCC來實現(xiàn)高并發(fā)性,并實現(xiàn)了所有4個SQL標準隔離級別。InnoDB默認為REPEATABLE READ隔離級別,并且通過間隙鎖(next-key locking)策略來防止在這個隔離級別上的幻讀:InnoDB不只鎖定在查詢中涉及的行,還會對索引結(jié)構(gòu)中的間隙進行鎖定,以防止幻行被插入。
InnoDB表是基于聚簇索引構(gòu)建的,我們將在第8章討論schema設(shè)計時詳細介紹聚簇索引。InnoDB的索引結(jié)構(gòu)與MySQL其他大部分存儲引擎有很大的不同。聚簇索引提供了非常快速的主鍵查找。但是,因為二級索引(secondary index,非主鍵索引)需要包含主鍵列,如果主鍵較大,則其他索引也會很大。如果表中的索引較多,主鍵應(yīng)當盡量小。
InnoDB內(nèi)部做了很多優(yōu)化。其中包括從磁盤預(yù)取數(shù)據(jù)的可預(yù)測性預(yù)讀、能夠自動在內(nèi)存中構(gòu)建哈希索引以進行快速查找的自適應(yīng)哈希索引(adaptive hash index),以及用于加速插入操作的插入緩沖區(qū)(insert buffer)。我們將在本書第4章討論這些內(nèi)容。
InnoDB的行為是非常復(fù)雜的,如果你正在使用InnoDB,強烈建議閱讀MySQL官方手冊中“InnoDB鎖定和事務(wù)模型”(參見鏈接5)一節(jié)。由于其MVCC架構(gòu),在使用InnoDB構(gòu)建應(yīng)用程序之前,有許多微妙之處需要注意。存儲引擎要為所有用戶甚至包括修改數(shù)據(jù)的用戶維持一致性的視圖,這是非常復(fù)雜的工作。
作為事務(wù)型存儲引擎,InnoDB可以通過一些機制和工具支持真正的在線“熱”備份,包括Oracle專有的MySQL Enterprise Backup和開源的Percona XtraBackup。我們將在第10章詳細介紹備份和恢復(fù)。
從MySQL 5.6開始,InnoDB引入了在線DDL,它最初只支持有限的使用場景,但在5.7和8.0版本中進行了擴充。就地(in-place)更改schema的機制允許在不使用完整表鎖和外部工具的情況下進行特定的表更改操作,這大大提高了MySQL InnoDB表的可操作性。在第6章中,我們將介紹在線更改schema的選項,包括本機工具和外部工具。
- 計算機綜合設(shè)計實驗指導
- 程序員修煉之道:從小工到專家
- 數(shù)據(jù)庫原理及應(yīng)用教程(第4版)(微課版)
- Python絕技:運用Python成為頂級數(shù)據(jù)工程師
- Spark快速大數(shù)據(jù)分析(第2版)
- 復(fù)雜性思考:復(fù)雜性科學和計算模型(原書第2版)
- Visual Studio 2015 Cookbook(Second Edition)
- MongoDB管理與開發(fā)精要
- 文本數(shù)據(jù)挖掘:基于R語言
- R數(shù)據(jù)科學實戰(zhàn):工具詳解與案例分析(鮮讀版)
- Dependency Injection with AngularJS
- gnuplot Cookbook
- Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)(第3版)
- Instant Autodesk AutoCAD 2014 Customization with .NET
- 淘寶、天貓電商數(shù)據(jù)分析與挖掘?qū)崙?zhàn)(第2版)