首先,show engines \G查看當(dāng)前支持的存儲(chǔ)引擎驻襟。
MyISAM和InnoDB的優(yōu)缺點(diǎn)
MyISAM有存儲(chǔ)限制夺艰,不支持事務(wù),支持表鎖沉衣,支持B樹索引郁副,不支持哈希索引,支持全文索引豌习,不支持集群索引存谎,不支持?jǐn)?shù)據(jù)緩存,支持索引緩存肥隆,支持?jǐn)?shù)據(jù)可壓縮既荚,空間使用低,內(nèi)存使用低栋艳,批量插入的速度高恰聘,不支持外鍵。
InnoDB存儲(chǔ)限制64TB,支持事務(wù)吸占,支持行鎖晴叨,支持B樹索引,不支持哈希索引矾屯,不支持全文索引兼蕊,支持集群索引,支持?jǐn)?shù)據(jù)緩存问拘,支持索引緩存遍略,不支持?jǐn)?shù)據(jù)可壓縮,空間使用高骤坐,內(nèi)存使用高绪杏,批量插入速度低,支持外鍵纽绍。
關(guān)于MyISAM
1.是MySQL5.1之前的默認(rèn)存儲(chǔ)引擎,使用show variables like '%engine%';可以查看當(dāng)前的默認(rèn)存儲(chǔ)引擎蕾久。不支持事務(wù)和外鍵,優(yōu)勢(shì)是訪問的速度快拌夏,占用資源少僧著,對(duì)事務(wù)完整性沒有要求或者以SELECT、INSERT為主的應(yīng)用基本上都可以使用這個(gè)引擎來創(chuàng)建表障簿。
2.每個(gè)MyISAM在磁盤上存儲(chǔ)成3個(gè)文件盹愚,文件名和表名相同,但擴(kuò)展名分別是.frm(framework存儲(chǔ)表定義).MYD(MyDATA,存儲(chǔ)數(shù)據(jù)).MYI(MYIndex,存儲(chǔ)索引)
3.數(shù)據(jù)文件和索引文件可以放置在不同的目錄站故,平均分布IO,獲得更快的速度皆怕。
4.要指定索引文件和數(shù)據(jù)文件的路徑毅舆,需要在創(chuàng)建表時(shí)通過DATA DIRECTORY和INDEX DIRECTORY語句指定,文件路徑是絕對(duì)路徑愈腾,并且需要訪問權(quán)限憋活。
5.MyISAM類型的表可能會(huì)損壞,損壞后的表會(huì)提示需要修復(fù)或者訪問后返回錯(cuò)誤的結(jié)果虱黄≡眉矗可以用check table語句來檢查MyISAM表的健康,并用repair table語句修復(fù)一個(gè)損壞的MyISAM表橱乱。
6.MyISAM的表又支持3種不同的存儲(chǔ)格式辜梳,分別是:靜態(tài)(固定長(zhǎng)度)表;動(dòng)態(tài)表泳叠;壓縮表冗美;
? 6.1:靜態(tài)表是默認(rèn)存儲(chǔ)格式,字段都是非變長(zhǎng)字段析二,但是占用空間通常比動(dòng)態(tài)表多,靜態(tài)表的數(shù)據(jù)在存儲(chǔ)時(shí)會(huì)按照列的寬度定義補(bǔ)足空格节预。但是返回時(shí)卻不會(huì)得到叶摄。需要注意,本來就有空格時(shí)怎么處理安拟。
? 6.2動(dòng)態(tài)表包含變長(zhǎng)字段蛤吓,占用空間相對(duì)較少,但是頻繁的更新刪除記錄會(huì)產(chǎn)生碎片糠赦,需要定期執(zhí)行optimize table語句來改善性能会傲,并且出現(xiàn)故障時(shí)恢復(fù)相對(duì)困難。
? 6.3壓縮表時(shí)有myisampack工具創(chuàng)建拙泽,占據(jù)非常小的磁盤空間淌山。
7.離散型不需要事務(wù)的還是可以用的,比 InnoDB快一點(diǎn)
關(guān)于InnoDB
1.MySQL5.1之后改成了InnoDB為默認(rèn)存儲(chǔ)引擎顾瞻;
2.使用多表空間存儲(chǔ)時(shí)生成2個(gè)文件.frm存儲(chǔ)表結(jié)構(gòu) .ibd存儲(chǔ)數(shù)據(jù)和索引
3.用于事務(wù)處理應(yīng)用程序泼疑,支持外鍵。如果應(yīng)用對(duì)事務(wù)的完整性有比較高的要求荷荤,在并發(fā)條件下要求數(shù)據(jù)的一致性退渗,數(shù)據(jù)操作除了插入和查詢以外,還包括很多的更新蕴纳、刪除操作会油,那么InnoDB 存儲(chǔ)引擎應(yīng)該是比較合適的選擇。
擴(kuò)展:
使用OPTIMIZE table test;可以會(huì)回收空間和磁盤碎片,對(duì)含有TEXT 和BLOB 字段的表古毛,如果經(jīng)常做刪除和修改記錄的操作要定時(shí)執(zhí)行翻翩。