MySQL有多種存儲引擎猿棉,每種存儲引擎有各自的優(yōu)缺點(diǎn),可以擇優(yōu)使用:
MyISAM残邀、InnoDB皆辽、MERGE、MEMORY(HEAP)芥挣、BDB(BerkeleyDB)驱闷、EXAMPLE、FEDERATED空免、ARCHIVE空另、CSV、BLACKHOLE蹋砚。
MySQL支持?jǐn)?shù)個(gè)存儲引擎作為對不同表的類型的處理器扼菠。
· MyISAM管理非事務(wù)表。它提供高速存儲和檢索都弹,以及全文搜索能力娇豫。MyISAM在所有MySQL配置里被支持,它是默認(rèn)的存儲引擎畅厢,除非你配置MySQL默認(rèn)使用另外一個(gè)引擎冯痢。
· MEMORY存儲引擎提供“內(nèi)存中”表。MERGE存儲引擎允許集合將被處理同樣的MyISAM表作為一個(gè)單獨(dú)的表框杜。就像MyISAM一樣浦楣,MEMORY和MERGE存儲引擎處理非事務(wù)表,這兩個(gè)引擎也都被默認(rèn)包含在MySQL中咪辱。
注釋:MEMORY存儲引擎正式地被確定為HEAP引擎振劳。
· InnoDB和BDB存儲引擎提供事務(wù)安全表。BDB被包含在為支持它的操作系統(tǒng)發(fā)布的MySQL-Max二進(jìn)制分發(fā)版里油狂。InnoDB也默認(rèn)被包括在所 有MySQL 5.1二進(jìn)制分發(fā)版里历恐,你可以按照喜好通過配置MySQL來允許或禁止任一引擎。
· EXAMPLE存儲引擎是一個(gè)“存根”引擎专筷,它不做什么弱贼。你可以用這個(gè)引擎創(chuàng)建表,但沒有數(shù)據(jù)被存儲于其中或從其中檢索磷蛹。這個(gè)引擎的目的是服務(wù)吮旅,在 MySQL源代碼中的一個(gè)例子,它演示說明如何開始編寫新存儲引擎味咳。同樣庇勃,它的主要興趣是對開發(fā)者檬嘀。
· NDB Cluster是被MySQL Cluster用來實(shí)現(xiàn)分割到多臺計(jì)算機(jī)上的表的存儲引擎。它在MySQL-Max 5.1二進(jìn)制分發(fā)版里提供责嚷。這個(gè)存儲引擎當(dāng)前只被Linux, Solaris, 和Mac OS X 支持鸳兽。在未來的MySQL分發(fā)版中,我們想要添加其它平臺對這個(gè)引擎的支持再层,包括Windows贸铜。
· ARCHIVE存儲引擎被用來無索引地,非常小地覆蓋存儲的大量數(shù)據(jù)聂受。
· CSV存儲引擎把數(shù)據(jù)以逗號分隔的格式存儲在文本文件中蒿秦。
· BLACKHOLE存儲引擎接受但不存儲數(shù)據(jù),并且檢索總是返回一個(gè)空集蛋济。
· FEDERATED存儲引擎把數(shù)據(jù)存在遠(yuǎn)程數(shù)據(jù)庫中棍鳖。在MySQL 5.1中,它只和MySQL一起工作碗旅,使用MySQL C Client API渡处。在未來的分發(fā)版中,我們想要讓它使用其它驅(qū)動器或客戶端連接方法連接到另外的數(shù)據(jù)源祟辟。
雖然說MySQL有這么多存儲引擎医瘫,但是在一般使用當(dāng)中相對常用的是MyISAM和InnoBD?。
接下來 我會對于MyISAM和InnoBD?來講解下旧困,其中的區(qū)別醇份。或者說如何在實(shí)際應(yīng)用中抉擇兩者吼具。
InnoDB:????????????????????????????????????????????????????????????????????????????????????????????????MyISAM:
支持事務(wù)處理等? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不支持事務(wù)僚纷,回滾將造成不完全回滾,不具有原子性
不加鎖讀取
支持外鍵? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?不支持外鍵
支持行鎖
不支持FULLTEXT類型的索引? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????????????????????????????支持全文搜索
不保存表的具體行數(shù)拗盒,掃描表來計(jì)算有多少行????????????????????????????????????????保存表的具體行數(shù),不帶where時(shí)怖竭,直接返回保存的行數(shù)
DELETE 表時(shí),是一行一行的刪除?????????????????????????????????????????????????????????DELETE 表時(shí)陡蝇,先drop表痊臭,然后重建表
InnoDB 把數(shù)據(jù)和索引存放在表空間里面? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MyISAM 表被存放在三個(gè)文件 。frm 文件存放表格定義登夫。 數(shù)據(jù)文件是? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MYD?(MYData) 趣兄。?索引文件是MYI (MYIndex)引伸
跨平臺可直接拷貝使用? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 跨平臺很難直接拷貝
InnoDB中必須包含AUTO_INCREMENT類型字段的索引? ? ? ? ? ? ? ? ? ? ? ? MyISAM中可以使AUTO_INCREMENT類型字段建立聯(lián)合索引
表格很難被壓縮? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?表格可以被壓縮
總結(jié):
因?yàn)镸yISAM相對簡單所以在效率上要優(yōu)于InnoDB.如果系統(tǒng)讀多,寫少悼嫉。對原子性要求低。那么MyISAM最好的選擇拼窥。且MyISAM恢復(fù)速度快戏蔑√D可直接用備份覆蓋恢復(fù)。
如果系統(tǒng)讀少总棵,寫多的時(shí)候鳍寂,尤其是并發(fā)寫入高的時(shí)候。InnoDB就是首選了情龄。
兩種類型都有自己優(yōu)缺點(diǎn)迄汛,選擇那個(gè)完全要看自己的實(shí)際類弄。