文章來源:菜鳥教程筆記
InnoDB 存儲(chǔ)引擎
InnoDB 是事務(wù)型數(shù)據(jù)庫的首選引擎囤锉,支持事務(wù)安全表 (ACID)偷溺,支持行鎖定和外鍵哄孤。MySQL5.5.5 之后,InnoDB 作為默認(rèn)存儲(chǔ)引擎胸私,InnoDB 主要特性有:
InnoDB 給 MySQL 提供了具有提交厌处、回滾和崩潰恢復(fù)能力的事務(wù)安全(ACID 兼容)存儲(chǔ)引擎。InnoDB 鎖定在行級(jí)并且也在 SELECT 語句中提供一個(gè)類似 Oracle 的非鎖定讀岁疼。這些功能增加了多用戶部署和性能阔涉。在 SQL 查詢中,可以自由地將 InnoDB 類型的表與其他 MySQL 的表的類型混合起來捷绒,甚至在同一個(gè)查詢中也可以混合瑰排。
InnoDB 是為處理巨大數(shù)據(jù)量的最大性能設(shè)計(jì)。它的 CPU 的效率可能是任何其它基于磁盤的關(guān)系數(shù)據(jù)庫引擎所不能匹敵的暖侨。
InnoDB 存儲(chǔ)引擎完全與 MySQL 服務(wù)器整合椭住,InnoDB 存儲(chǔ)引擎為在主內(nèi)存中緩存數(shù)據(jù)和索引而維持它自己的緩沖池。InnoDB 將它的表和索引存在一個(gè)邏輯表空間中字逗,表空間可以包含數(shù)個(gè)文件(或原始磁盤分區(qū))京郑。這與 MyISAM 表不同显押,比如在 MyISAM 表中每個(gè)表被存在分離的文件中。InnoDB 表可以是任何尺寸傻挂,即使在文件尺寸被艱制為 2GB 的操作系統(tǒng)上。
InnoDB 支持外鍵完整性約束(FOREIGN KEY)挖息。 存儲(chǔ)表中的數(shù)據(jù)時(shí)金拒,每張表的存儲(chǔ)都按主鍵順序存放,如果沒有顯示在表定義時(shí)指定主鍵套腹,InnoDB 會(huì)被每一行生成一個(gè) 6B 的 ROWID绪抛,并以此作為主健。
InnoDB 被用在眾多需要高性能的大型數(shù)據(jù)庫站點(diǎn)上电禀。 InnoDB 不創(chuàng)建目錄幢码,使用 InnoDB 時(shí),MySQL 將在 MYSQL 數(shù)據(jù)目錄下創(chuàng)建一個(gè)名為 ibdata1 的 10MB 大小的自動(dòng)擴(kuò)展數(shù)據(jù)文件尖飞,以及兩個(gè)名為 ib_logfile() 和 ib_logfile1 的 5MB 大小的日志文件症副。
MyISAM 存儲(chǔ)引擎
MyISAM 基于 ISAM 的存儲(chǔ)引擎,并對(duì)其進(jìn)行擴(kuò)展政基。它是在 Web贞铣、數(shù)據(jù)存儲(chǔ)和其他應(yīng)用環(huán)境下最常用的存儲(chǔ)引擎之一。MyISAM 擁有較高的插入沮明、查詢速度辕坝,但不支持事務(wù)。在 MySQL5.5.5 之前的版本中荐健,MyISAM是默認(rèn)存儲(chǔ)引擎酱畅。MyISAM 主要特性有:
大文件(達(dá) 63 位文件長度)在支持大文件 系統(tǒng)和操作系統(tǒng)上被支持。
當(dāng)把刪除江场、更新及插入操作混合使用的時(shí)候纺酸,動(dòng)態(tài)尺寸的行產(chǎn)生更少的碎片。這要通過合并相鄰被刪除的塊扛稽,以及若下一個(gè)塊被刪除吁峻,就擴(kuò)展到下一塊來自動(dòng)完成。
每個(gè) MyISAM 表最大索引數(shù)是 64在张,這也可以通過編譯來改變用含。對(duì)于鍵長度超過 250B 的情況,一個(gè)超過 1024B 的鍵將被用上帮匾。BLOB 和 TEXT 列可以被索引啄骇。
NULL 值被允許在索引的列中。這個(gè)值占每個(gè)鍵的 0~1 個(gè)字節(jié)瘟斜。
所有數(shù)字鍵值以高字節(jié)優(yōu)先被存儲(chǔ)以允許一個(gè)更高的索引壓縮缸夹。
每表一個(gè) AUTO_INCREMENT 列的內(nèi)部處理痪寻。MyISAM 為 INSERT 和 UPDATE 操作自動(dòng)更新這一列。使得 AUTO_INCREMENT 列更快(至少 10%)虽惭。在序列頂?shù)闹当粍h除除之后就不能再利用橡类。
可以把數(shù)據(jù)文件和索引文件放在不同目錄。
每個(gè)字符列可以有不同的字符集芽唇。
有 VARCHAR 的表可以固定或動(dòng)態(tài)記錄長度顾画。
VARCHAR 和 CHAR 列可以多達(dá) 64KB
使用 MyISAM 引擎創(chuàng)建數(shù)據(jù)庫,將生產(chǎn) 3 個(gè)文件匆笤。文件的名字以表的名字開始研侣,擴(kuò)展名指出文件類型:frm 文件存儲(chǔ)表定義,數(shù)據(jù)文件的擴(kuò)展名為 .MYD(MYData)炮捧,索引文件的擴(kuò)展名是 .MYI(MYIndex)庶诡。
MEMORY 存儲(chǔ)引擎
MEMORY 存儲(chǔ)引擎將表中的數(shù)據(jù)存儲(chǔ)到內(nèi)存中,為查詢和引用其他表數(shù)據(jù)提供快速訪問咆课。MEMORY 主要特性有:
MEMORY 表的每個(gè)表可以多達(dá) 32 個(gè)索引末誓,每個(gè)索引 16 列,以及 500B 的最大鍵長度书蚪。
MEMORY 存儲(chǔ)引擎引擎執(zhí)行 HASH 和 BTREE 索引基显。
可以在一個(gè) MEMORY 表中有非唯一鍵。
MEMORY 不支持 BLOB 或 TEXT 列善炫。
MEMORY 表使用一個(gè)固定的記錄長度格式撩幽。
MEMORY 支持 AUTO_INCREMENT 列和對(duì)包含 NULL 值的列索引。
MEMORY 表內(nèi)容被存在內(nèi)存中箩艺,內(nèi)存是 MEMORY 表和服務(wù)器在查詢處理時(shí)的空閑中創(chuàng)建的內(nèi)部表共享窜醉。
MEMORY 表在所有客戶端之間共享(就像其他任何非 TEMPORARY 表)。
當(dāng)不再需要 MEMORY 表的內(nèi)容時(shí)艺谆,要釋放被 MEMORY 表使用的內(nèi)存榨惰,應(yīng)該執(zhí)行 DELETE FROM 或 TRUNCATE TABLE,或者刪除整個(gè)表(使用 DROP TABLE)静汤。
存儲(chǔ)引擎的選擇
功能 | MyISAM | Memory | InnoDB | Archive |
---|---|---|---|---|
存儲(chǔ)限制 | 265TB | RAM | 65TB | Node |
支持事務(wù) | No | No | Yes | No |
支持全文索引 | Yes | No | No | No |
支持?jǐn)?shù)索引 | Yes | Yes | Yes | No |
支持哈希索引 | No | Yes | No | No |
支持?jǐn)?shù)據(jù)緩存 | No | N/A | Yes | No |
支持外鍵 | No | No | Yes | No |