存儲(chǔ)引擎DBMS使用存儲(chǔ)引擎進(jìn)行數(shù)據(jù)的創(chuàng)建、查詢、更新、刪除操作。 不同的存儲(chǔ)引擎提供不同的存儲(chǔ)機(jī)制、索引技巧、鎖定水平等功能,使用不同的存儲(chǔ)引擎還可以獲得特定的功能。 MySQL提供了多種存儲(chǔ)引擎,最常見(jiàn)的有3種。
1、MyISAMMySQL5.5之前的默認(rèn)的存儲(chǔ)引擎,每個(gè)MyISAM在磁盤上存儲(chǔ)成三個(gè)文件,文件名和表名相同,擴(kuò)展名分別是 (1)frm文件:存儲(chǔ)表的定義 (2)MYD文件:存儲(chǔ)表中的數(shù)據(jù)(記錄) (3)MYI文件:存儲(chǔ)索引。索引保存的是數(shù)據(jù)文件的指針
特點(diǎn)
適用場(chǎng)景
MyISAM支持三種不同的存儲(chǔ)格式(1)靜態(tài)表(fixed) 表中不能包含變長(zhǎng)字段(比如VARCHAR, BLOB, TEXT),每個(gè)記錄都是固定的長(zhǎng)度。如果MyISAM表中沒(méi)有一個(gè)變長(zhǎng)字段,則默認(rèn)使用靜態(tài)表。 優(yōu)點(diǎn):存儲(chǔ)迅速,出現(xiàn)故障容易恢復(fù) 缺點(diǎn):占用空間比動(dòng)態(tài)表大。靜態(tài)表在進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí)會(huì)按照事先定義的列寬補(bǔ)足空格,但在訪問(wèn)的時(shí)候會(huì)去掉補(bǔ)的空格
(2)動(dòng)態(tài)表(dynamic) 可包含變長(zhǎng)字段(varchar、blob、text),如果一個(gè)MyISAM表包含任何可變長(zhǎng)度的字段,或者該表創(chuàng)建時(shí)用row_format=dynamic指定,則該表使用動(dòng)態(tài)格式存儲(chǔ) 優(yōu)點(diǎn):占用空間小 缺點(diǎn):頻繁的更新、刪除操作會(huì)產(chǎn)生碎片,需要定期用optimize table語(yǔ)句或myisamchk -r命令來(lái)改善性能,出現(xiàn)故障后較難恢復(fù)
(3)壓縮表 由myisampack工具創(chuàng)建,每條記錄都會(huì)被單獨(dú)壓縮,占據(jù)硬盤空間極小。
2、InnoDBMySQL5.5及其之后默認(rèn)的存儲(chǔ)引擎
InnoDB有2種存儲(chǔ)方式
特點(diǎn)
適用場(chǎng)景
可以在join查詢中混用InnoDB引擎的表、其他引擎的表
MyISAM、InnoDB的對(duì)比(1)鎖粒度不同,InnoDB為行級(jí)鎖,MyISAM為表級(jí)鎖
(2)InnoDB支持外鍵,MyISAM不支持
(3)InnoDB支持事務(wù),MyISAM不支持
(4)InnoDB緩存查詢到的索引、數(shù)據(jù),MyISAM只緩存索引
(5)查詢效率MyISAM遠(yuǎn)高于InnoDB,尤其是在數(shù)據(jù)表行數(shù)多的時(shí)候
(6)InnoDB支持在線熱備,有很成熟的在線熱備解決方案
一句話,MyISAM效率更高、速度更快,InnoDB功能更全、安全性更好、開(kāi)銷更大。
3、MEMORY數(shù)據(jù)(記錄)不是儲(chǔ)存在文件中,而是存儲(chǔ)在內(nèi)存中。每個(gè)memory表對(duì)應(yīng)一個(gè).frm文件(表定義、索引)。
特點(diǎn)
適用場(chǎng)景
如何選擇合適的存儲(chǔ)引擎
一個(gè)數(shù)據(jù)庫(kù)中,不同的表可以使用不同的存儲(chǔ)引擎。 使用合適的存儲(chǔ)引擎,會(huì)提高數(shù)據(jù)庫(kù)的性能。
|
|