一、MyISAM存儲(chǔ)引擎
1棋电、物理文件結(jié)構(gòu)**
每一個(gè)表在MyISAM存儲(chǔ)引擎中都以三個(gè)以表名命名的物理文件構(gòu)成。
(1)任何存儲(chǔ)引擎都不可或缺的存放表結(jié)構(gòu)定義的.frm(Form)文件
(2)存放表數(shù)據(jù)的.MYD文件(My Data)
(3)存放索引數(shù)據(jù)的.MYI文件(My Index)
這里著重說一下.MYD文件的文件存放格式削彬,分為靜態(tài)固定長度乌妙、動(dòng)態(tài)可變長度、壓縮三種格式靶端。表數(shù)據(jù)是默認(rèn)不壓縮的谎势,在創(chuàng)建表時(shí),可以通過ROW_FORMAT設(shè)置默認(rèn)為壓縮{COMPRESSED|DEFAULT}杨名,也可以通過MyISAMpack工具進(jìn)行壓縮脏榆。
當(dāng)表數(shù)據(jù)沒有被壓縮時(shí),靜態(tài)與動(dòng)態(tài)的區(qū)分就與表中定義的字段類型有關(guān)了台谍。當(dāng)出現(xiàn)VARCHAR等可變長度類型時(shí)须喂,這個(gè)表就是動(dòng)態(tài)的;當(dāng)沒有出現(xiàn)任何可變長類型時(shí),這個(gè)表就是靜態(tài)的坞生。
2仔役、支持的索引類型**
(1)BTree索引(最常見)
(2)R-Tree索引
(3)Full-Text索引
3、鎖機(jī)制——支持表級鎖定
4是己、事務(wù)處理——為保證效率又兵,不支持事務(wù)處理
5、增刪改查性能——SELECT性能較高卒废,適合執(zhí)行查詢較多的情況使用
6沛厨、COUNT()問題——MyISAM存儲(chǔ)引擎記錄表行數(shù),所以在使用COUNT()時(shí)升熊,只需取出存儲(chǔ)的行數(shù)俄烁,而不用遍歷表,效率較高
二级野、InnoDB存儲(chǔ)引擎
1页屠、物理文件結(jié)構(gòu)
(1)同MyISAM一樣的是,InnoDB存儲(chǔ)引擎也有.frm文件存儲(chǔ)表結(jié)構(gòu)定義
(2)與MyISAM不同的是蓖柔,InnoDB的表數(shù)據(jù)與索引數(shù)據(jù)是存儲(chǔ)在一起的辰企,但在這個(gè)文件中每張表是獨(dú)自占有一塊表空間還是共享所有表空間,是由用戶決定的况鸣。如果獨(dú)享表空間牢贸,每個(gè)表的表數(shù)據(jù)與索引數(shù)據(jù)都會(huì)存放在一個(gè).ibd(innoDB data)文件中;如果是共享表空間镐捧,通過innodb_data_file_path指定后潜索,每次增加數(shù)據(jù)文件后必須停機(jī)重啟才能生效,很不方便懂酱。
(3)InnoDB有支持事務(wù)及安全的日志文件竹习,這個(gè)文件非常重要,InnoDB可以通過日志文件將數(shù)據(jù)庫崩潰時(shí)已經(jīng)完成但還沒來得及將內(nèi)存中已經(jīng)修改但未完全寫入磁盤的數(shù)據(jù)寫入磁盤列牺,也可以把已部分完成并寫入磁盤的未完成事務(wù)回滾整陌,保證數(shù)據(jù)一致性。如果錯(cuò)誤刪除日志文件會(huì)導(dǎo)致數(shù)據(jù)庫崩潰且無法啟動(dòng)瞎领。
2泌辫、支持的索引類型與MyISAM基本一致,但具體實(shí)現(xiàn)因?yàn)槲募Y(jié)構(gòu)的不同有很大差異九默,具體差異參看上述博客震放。
3、鎖機(jī)制的改進(jìn)——實(shí)現(xiàn)了行級鎖荤西,為承受高并發(fā)增加了競爭力澜搅。
4伍俘、事務(wù)處理——實(shí)現(xiàn)了事務(wù)處理,可謂與MyISAM最重要的區(qū)別之一勉躺。
5癌瘾、增刪改查性能——如果執(zhí)行大量的增刪改操作,推薦使用InnoDB存儲(chǔ)引擎饵溅,它在刪除操作時(shí)是對行刪除妨退,不會(huì)重建表。
6蜕企、COUNT(*)問題——InnoDB存儲(chǔ)引擎會(huì)遍歷表以計(jì)算數(shù)量咬荷,效率較低。
7轻掩、其他特點(diǎn)——實(shí)現(xiàn)了外鍵幸乒、提供了多版本數(shù)據(jù)的提取。