1.定義數(shù)據(jù)庫和實例
兩個概念:
數(shù)據(jù)庫(database):物理操作系統(tǒng)文件或其他形式文件類型的集合穿挨。在MySQL數(shù)據(jù)庫中焰络,數(shù)據(jù)庫文件可以是frm、MYD舍败、MYI、ibd結(jié)尾的文件碗硬。當(dāng)使用NDB引擎時瓤湘,數(shù)據(jù)庫的文件可能不是操作系統(tǒng)上的文件,而是存放于內(nèi)存之中的文件恩尾,但是定義仍然不變弛说。
實例(instance):MySQL數(shù)據(jù)庫由后臺線程以及一個共享內(nèi)存區(qū)組成。共享內(nèi)存可以被運行的后臺線程所共享翰意。需要牢記的是木人,數(shù)據(jù)庫實例才是真正用于操作數(shù)據(jù)庫文件的。
在MySQL數(shù)據(jù)庫中冀偶,實例與數(shù)據(jù)庫的關(guān)系通常是一一對應(yīng)的醒第,即一個實例對應(yīng)一個數(shù)據(jù)庫。但是在集群情況下可能存在一個數(shù)據(jù)庫被多個數(shù)據(jù)實例使用的情況进鸠。
MySQL數(shù)據(jù)庫實例在系統(tǒng)上的表現(xiàn)就是一個進程稠曼。
解釋:
OLTP:在線事務(wù)處理
MVCC:多版本并發(fā)控制
2.MySQL體系結(jié)構(gòu)
MySQL由以下幾個部分組成:
連接池組件
管理服務(wù)和工具組件
SQL接口組件
查詢分析器組件
優(yōu)化器組件
緩沖組件
插件式存儲引擎
物理文件
需要特別注意的是,存儲引擎是基于表的客年,而不是數(shù)據(jù)庫霞幅。
3.MySQL存儲引擎
-
InnoDB存儲引擎
支持事務(wù),行鎖設(shè)計、支持外鍵,支持非鎖定讀嫂丙。通過使用多版本并發(fā)控制來獲得高并發(fā)性,實現(xiàn)了4中隔離級別扔傅,默認為REPEATABLE級別。同時,使用一種被稱為next key locking的策略來避免幻讀現(xiàn)象的產(chǎn)生猎塞。還提供了插入緩沖试读、二次寫、自適應(yīng)哈希索引邢享、預(yù)讀等高性能和高可用的功能鹏往。
對于表中數(shù)據(jù)的存儲,InnoDB存儲引擎采用了聚集的方式骇塘,因此每張表的存儲都是按主鍵的順序進行存放伊履。如果沒有顯示地在表定義時指定主鍵,InnoDB存儲引擎會為每一行生成一個6字節(jié)的ROWID款违,并以此作為主鍵唐瀑。
-
MyISAM存儲引擎
不支持事務(wù)、表鎖設(shè)計插爹,支持全文索引哄辣,主要面向一些OLAP數(shù)據(jù)庫應(yīng)用。緩沖池只緩存索引文件赠尾,而不緩沖數(shù)據(jù)文件力穗。表由MYD和MYI組成,MYD用來存放數(shù)據(jù)文件气嫁,MYI用來存放索引文件当窗。可以通過使用myisam pack工具進一步壓縮寸宵,壓縮后的表是制度的崖面,但可以通過myisampack來解壓數(shù)據(jù)文件。5.0開始梯影,默認支持256TB的單表數(shù)據(jù)巫员。
-
NDB存儲引擎
是一個集群存儲引擎,類似于Oracle的RAC集群甲棍。數(shù)據(jù)全部放在內(nèi)存中(5.1開始简识,可以將非索引數(shù)據(jù)放在磁盤上),因此主鍵查找速度極快感猛。NDB存儲引擎的連接操作(JOIN)是在MySQL數(shù)據(jù)庫層完成的七扰,而不是在存儲引擎層完成的。這意味著唱遭,復(fù)雜的連接操作需要巨大的網(wǎng)絡(luò)開銷戳寸,因此查詢速度很慢呈驶。
-
Memory存儲引擎
之前稱為HEAP存儲引擎拷泽。只支持表鎖,并發(fā)性能查,不支持TEXT和BLOB列類型司致。將表中的數(shù)據(jù)存放在內(nèi)存中拆吆,如果數(shù)據(jù)庫重啟或發(fā)生崩潰,表中的數(shù)據(jù)都將消失脂矫。它非常適用于存儲臨時數(shù)據(jù)的臨時表枣耀,以及數(shù)據(jù)倉庫中的緯度表。默認使用哈希索引庭再,而不是我們熟悉的B+樹索引捞奕。
-
Archive存儲引擎
只支持INSERT和SELECT操作,從5.1開始支持索引拄轻。使用zlib算法將數(shù)據(jù)行進行壓縮后存儲颅围,壓縮比一般可達1:10。非常適合存儲歸檔數(shù)據(jù)恨搓,如日志信息院促。
-
Federated存儲引擎
表不存放數(shù)據(jù),只是指向一臺遠程MySQL數(shù)據(jù)庫服務(wù)器上的表斧抱。
-
Maria存儲引擎
新開發(fā)的引擎常拓,設(shè)計目標是取代MyISAM存儲引擎。支持緩存數(shù)據(jù)和索引文件辉浦,應(yīng)用了行鎖設(shè)計弄抬,提供了MVCC功能,支持事務(wù)和非事務(wù)安全的選項盏浙。
-
其他存儲引擎
包括Merge眉睹、CSV、Sphinx废膘、Infobright竹海。
4.各存儲引擎之間的比較
下圖取自MySQL官方手冊,展現(xiàn)了一些常用MySQL存儲引擎之間的不同之處丐黄,包括存儲容量的限制斋配、事務(wù)支持、鎖的粒度灌闺、MVCC支持艰争、支持的索引、備份和復(fù)制等桂对。