MySql中MyISAM和InnoDB的區(qū)別
面試好幾次都被問道這個問題锅很,一直說不清楚,后來自己又復(fù)習(xí)了一下凤跑,這里總結(jié)一下爆安。
一、存儲引擎
存儲引擎說白了就是如何存儲數(shù)據(jù)仔引、如何為存儲的數(shù)據(jù)建立索引和如何更新扔仓、查詢數(shù)據(jù)等技術(shù)的實現(xiàn)方法。因為在關(guān)系數(shù)據(jù)庫中數(shù)據(jù)的存儲是以表的形式存儲的咖耘,所以存儲引擎也可以稱為表類型翘簇。
二、MySql中的存儲引擎
1)MyISAM:這種引擎是MySql最早提供的儿倒。這種引擎又可以分為靜態(tài)MyISAM版保、動態(tài)MyISAM和壓縮MyISAM三種。但是,不管是何種MyISAM表彻犁,目前它都不支持事務(wù)蹈垢,行級鎖和外鍵約束的功能。
2)MyISAM Merge引擎: 這種類型的引擎MyISAM的一種變種袖裕。合并表是將幾個相同的MyISAM表合并為一個虛表曹抬。常應(yīng)用于日志和數(shù)據(jù)倉庫。
3)InnoDB: InnoDB表類型可以看作是對MyISAM的進一步更新產(chǎn)品急鳄,它提供了事務(wù)谤民、行級鎖機制和外鍵約束的功能。
4)memory: 這種類型的數(shù)據(jù)表只存在于內(nèi)存中疾宏。它使用散列索引张足,所以數(shù)據(jù)的存取速度非常快坎藐。因為是存在于內(nèi)存中为牍,所以這種數(shù)據(jù)類型常應(yīng)用于臨時表中。
5)archive: 這種類型只支持select和insert語句岩馍,而且不支持索引碉咆。常應(yīng)用于日志記錄和聚合分析方面。
三 蛀恩、MyISAM和InnoDB及區(qū)別
1.MyISAM不支持事務(wù)疫铜,也不支持外鍵,尤其是訪問速度快双谆,對事務(wù)完整性沒有要求或者以SELECT壳咕、INSERT為主的應(yīng)用基本都可以使用這個引擎來創(chuàng)建表。
- InnoDB支持事務(wù)顽馋,也支持外鍵谓厘。InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復(fù)能力的事務(wù)安全寸谜。
- 鎖機制方面:InnoDB支持?jǐn)?shù)據(jù)行鎖定竟稳,MyISAM不支持行鎖定,只支持鎖定整個表程帕。即MyISAM同一個表上的讀鎖和寫鎖是互斥的住练,MyISAM并發(fā)讀寫時如果等待隊列中既有讀請求又有寫請求地啰,默認寫請求的優(yōu)先級高愁拭,即使讀請求先到,所以MyISAM不適合于有大量查詢和修改并存的情況亏吝,那樣查詢進程為長時間阻塞岭埠。因為MyISAM是鎖表,所以某項讀操作比較耗時會使其他寫進程餓死。