MySQL數(shù)據(jù)庫(kù)有多種存儲(chǔ)引擎:比如:MyISAM媒殉、InnoDB廷蓉、MERGE桃犬、MEMORY(HEAP)行楞、BDB(BerkeleyDB)、EXAMPLE、FEDERATED恒削、ARCHIVE尾序、CSV每币、BLACKHOLE等等兰怠,最常見的也就是MyISAM和InnoDB了李茫,下面主要講解下MyISAM和InnoDB兩種mysql數(shù)據(jù)庫(kù)存儲(chǔ)引擎的區(qū)別
MyISAM引擎是一種非事務(wù)性的引擎魄宏,提供高速存儲(chǔ)和檢索宠互,以及全文搜索能力,適合數(shù)據(jù)倉(cāng)庫(kù)等查詢頻繁的應(yīng)用搏色。MyISAM中频轿,一個(gè)table實(shí)際保存為三個(gè)文件略吨,.frm存儲(chǔ)表定義考阱,.MYD存儲(chǔ)數(shù)據(jù),.MYI存儲(chǔ)索引乞榨。MyISAM在所有MySQL配置里被支持吃既,它是默認(rèn)的存儲(chǔ)引擎,除非你配置MySQL默認(rèn)使用另外一個(gè)引擎河质。
MySQL服務(wù)器中的其他非事務(wù)性存儲(chǔ)引擎(如MyISAM)遵從不同的數(shù)據(jù)完整性范例掀鹅,稱之為“原子操作”。按照事務(wù)術(shù)語(yǔ)戚丸,MyISAM表總能高效地工作在AUTOCOMMIT=1模式下限府。原子操作通常能提供可比較的完整性以及更好的性能痢缎。與經(jīng)過優(yōu)化調(diào)整的最快的事務(wù)性表相比主儡,它的速度快3~5倍蒲犬。由于MySQL服務(wù)器支持兩種范例蛇捌,因而你能決定是否利用原子操作的速度更好地服務(wù)于你的應(yīng)用程序,或使用事務(wù)特性回溺。該選擇可按表進(jìn)行遗遵。
InnoDB則是一種支持事務(wù)的引擎。給MySQL提供了具有提交允粤,回滾和崩潰恢復(fù)能力的事務(wù)安全(ACID兼容)存儲(chǔ)引擎。所以的數(shù)據(jù)存儲(chǔ)在一個(gè)或者多個(gè)數(shù)據(jù)文件中琅坡,支持類似于Oracle的鎖機(jī)制。一般在OLTP應(yīng)用中使用較廣泛售躁。如果沒有指定InnoDB配置選項(xiàng)陪捷,MySQL將在MySQL數(shù)據(jù)目錄下創(chuàng)建一個(gè)名為ibdata1的自動(dòng)擴(kuò)展數(shù)據(jù)文件,以及兩個(gè)名為ib_logfile0和ib_logfile1的日志文件。
InnoDB鎖定在行級(jí)并且也在SELECT語(yǔ)句提供一個(gè)Oracle風(fēng)格一致的非鎖定讀凌盯。這些特色增加了多用戶部署和性能。沒有在InnoDB中擴(kuò)大鎖定的需要二打,因?yàn)樵贗nnoDB中行級(jí)鎖定適合非常小的空間县忌。InnoDB也支持FOREIGN KEY強(qiáng)制。在SQL查詢中继效,你可以自由地將InnoDB類型的表與其它MySQL的表的類型混合起來(lái)症杏,甚至在同一個(gè)查詢中也可以混合。
InnoDB是為處理巨大數(shù)據(jù)量時(shí)的最大性能設(shè)計(jì)瑞信。它的CPU效率可能是任何其它基于磁盤的關(guān)系數(shù)據(jù)庫(kù)引擎所不能匹敵的厉颤。InnoDB存儲(chǔ)引擎被完全與MySQL服務(wù)器整合,InnoDB存儲(chǔ)引擎為在主內(nèi)存中緩存數(shù)據(jù)和索引而維持它自己的緩沖池凡简。
InnoDB存儲(chǔ)它的表&索引在一個(gè)表空間中逼友,表空間可以包含數(shù)個(gè)文件。InnoDB表可以是任何尺寸秤涩,即使在文件尺寸被限制為2GB的操作系統(tǒng)上帜乞。InnoDB也默認(rèn)被包括在所有MySQL 5.1二進(jìn)制分發(fā)版里。
總結(jié)如下:
1筐眷、 存儲(chǔ)結(jié)構(gòu)
MyISAM:每個(gè)MyISAM在磁盤上存儲(chǔ)成三個(gè)文件怨喘。第一個(gè)文件的名字以表的名字開始,擴(kuò)展名指出文件類型暖途。.frm文件存儲(chǔ)表定義。數(shù)據(jù)文件的擴(kuò)展名為.MYD (MYData)。索引文件的擴(kuò)展名是.MYI (MYIndex)。 InnoDB:所有的表都保存在同一個(gè)數(shù)據(jù)文件中(也可能是多個(gè)文件类腮,或者是獨(dú)立的表空間文件)针饥,InnoDB表的大小只受限于操作系統(tǒng)文件的大小,一般為2GB。
2吗伤、 存儲(chǔ)空間
MyISAM:可被壓縮礁阁,存儲(chǔ)空間較小棚品。支持三種不同的存儲(chǔ)格式:靜態(tài)表(默認(rèn)骡澈,但是注意數(shù)據(jù)末尾不能有空格,會(huì)被去掉)、動(dòng)態(tài)表区丑、壓縮表可霎。 InnoDB:需要更多的內(nèi)存和存儲(chǔ)旷余,它會(huì)在主內(nèi)存中建立其專用的緩沖池用于高速緩沖數(shù)據(jù)和索引炉旷。
3、 事務(wù)支持
MyISAM:強(qiáng)調(diào)的是性能,每次查詢具有原子性,其執(zhí)行數(shù)度比InnoDB類型更快壁熄,但是不提供事務(wù)支持昌执。 InnoDB:提供事務(wù)支持事務(wù)铐达,外部鍵等高級(jí)數(shù)據(jù)庫(kù)功能。 具有事務(wù)(commit)、回滾(rollback)和崩潰修復(fù)能力(crash recovery capabilities)的事務(wù)安全(transaction-safe (ACID compliant))型表。
4沿猜、 CURD操作
MyISAM:如果執(zhí)行大量的SELECT呼畸,MyISAM是更好的選擇另绩。(因?yàn)闆]有支持行級(jí)鎖)花嘶,在增刪的時(shí)候需要鎖定整個(gè)表格,效率會(huì)低一些蹦漠。相關(guān)的是innodb支持行級(jí)鎖笛园,刪除插入的時(shí)候只需要鎖定改行就行棵红,效率較高 InnoDB:如果你的數(shù)據(jù)執(zhí)行大量的INSERT或UPDATE忆绰,出于性能方面的考慮亚享,應(yīng)該使用InnoDB表。DELETE 從性能上InnoDB更優(yōu)燥筷,但DELETE FROM table時(shí)箩祥,InnoDB不會(huì)重新建立表,而是一行一行的刪除肆氓,在innodb上如果要清空保存有大量數(shù)據(jù)的表袍祖,最好使用truncate table這個(gè)命令。
5做院、 外鍵
MyISAM:不支持 InnoDB:支持
MySQL數(shù)據(jù)庫(kù)類型從InnoDB轉(zhuǎn)換為MyISAM
USE 數(shù)據(jù)庫(kù)名;
SHOW TABLES;
ALTER TABLE 表名 ENGINE=MYISAM;
常用修改
修改MySQL數(shù)據(jù)庫(kù)引擎為INNODB:
1盲泛、首先修改my.ini,在[mysqld]下加上:
default-storage-engine=INNODB
2键耕、用sql語(yǔ)句修改已經(jīng)建成表的引擎:
alter table 待改表明 type=InnoDB;