經(jīng)常面試都會(huì)問(wèn)到MYSQL有哪些存儲(chǔ)引擎,以及各自的優(yōu)缺點(diǎn)。今天主要分享常見(jiàn)的存儲(chǔ)引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)等,以及最常用的MyISAM與InnoDB兩個(gè)引擎 ,文章尾部有兩者的詳細(xì)比較。 MySQL常用存儲(chǔ)引擎介紹1.InnoDB 引擎(MySQL5.5以后默認(rèn)使用) MySQL 5.5 及以后版本中的默認(rèn)存儲(chǔ)引擎,他的優(yōu)點(diǎn)如下:
2.MyISAM引擎 特性如下:
3.MEMORY 存儲(chǔ)引擎 提供內(nèi)存表,也不支持事務(wù)和外鍵。顯著提高訪問(wèn)數(shù)據(jù)的速度,可用于緩存會(huì)頻繁訪問(wèn)的、可以重構(gòu)的數(shù)據(jù)、計(jì)算結(jié)果、統(tǒng)計(jì)值、中間結(jié)果。 缺點(diǎn)如下:
MySQL存儲(chǔ)引擎MyISAM與InnoDB如何選擇1.兩種存儲(chǔ)引擎的大致區(qū)別表現(xiàn)在: 1)InnoDB支持事務(wù),MyISAM不支持,這一點(diǎn)是非常之重要。事務(wù)是一種高級(jí)的處理方式,如在一些列增刪改中只要哪個(gè)出錯(cuò)還可以回滾還原,而MyISAM就不可以了。 2)MyISAM適合查詢以及插入為主的應(yīng)用,InnoDB適合頻繁修改以及涉及到安全性較高的應(yīng)用 3)InnoDB支持外鍵,MyISAM不支持 4)從MySQL5.5.5以后,InnoDB是默認(rèn)引擎 5)InnoDB不支持FULLTEXT類型的索引 6)InnoDB中不保存表的行數(shù),如select count(*) from table時(shí),InnoDB需要掃描一遍整個(gè)表來(lái)計(jì)算有多少行,但是MyISAM只要簡(jiǎn)單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(*)語(yǔ)句包含where條件時(shí)MyISAM也需要掃描整個(gè)表。 7)對(duì)于自增長(zhǎng)的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中可以和其他字段一起建立聯(lián)合索引。 8)清空整個(gè)表時(shí),InnoDB是一行一行的刪除,效率非常慢。MyISAM則會(huì)重建表。 9)InnoDB支持行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like ‘%lee%’ 有人說(shuō)MYISAM只能用于小型應(yīng)用,其實(shí)這只是一種偏見(jiàn)。 如果數(shù)據(jù)量比較大,這是需要通過(guò)升級(jí)架構(gòu)來(lái)解決,比如分表分庫(kù),讀寫分離,而不是單純地依賴存儲(chǔ)引擎。 現(xiàn)在一般都是選用InnoDB了,主要是MyISAM的全表鎖,讀寫串行問(wèn)題,并發(fā)效率鎖表,效率低,MyISAM對(duì)于讀寫密集型應(yīng)用一般是不會(huì)去選用的。 總之: 1.MyISAM類型不支持事務(wù)處理等高級(jí)處理,而InnoDB類型支持。 2.MyISAM類型的表強(qiáng)調(diào)的是性能,其執(zhí)行速度比InnoDB類型更快,但是不提供事務(wù)支持,而InnoDB提供事務(wù)支持已經(jīng)外部鍵等高級(jí)數(shù)據(jù)庫(kù)功能。 |
|
來(lái)自: 印度阿三17 > 《開(kāi)發(fā)》