存儲引擎是mysql數(shù)據(jù)庫最重要的特性之一涡驮,用戶可以根據(jù)自身需求選擇合適的存儲引擎,例如:是否支持事務(wù)、批量插入速度挖腰、行級鎖或者表級鎖等相關(guān)特性。mysql默認(rèn)支持很多種不同的存儲引擎练湿,用戶在創(chuàng)建表的時候根據(jù)表的作用可以指定不同的存儲引擎猴仑。
在mysql5.5之前默認(rèn)存儲引擎都是MyISAM,5.5版本之后默認(rèn)是InnoDB.
下面介紹幾種常見的存儲引擎:
1肥哎、MyISAM
MyISAM不支持事務(wù)辽俗,也不支持外鍵疾渣,當(dāng)然現(xiàn)在雖然外鍵用的很少,由于不支持事務(wù)崖飘,所以訪問速度相當(dāng)?shù)目炝窦瘢坎迦氲臄?shù)據(jù)也非常快朱浴。每創(chuàng)建一張表會在磁盤上生成3個文件吊圾,分別為:xx.frm(存放元信息)、xx.MYD(存放數(shù)據(jù))翰蠢、xx.MYIndex(存放索引)街夭,用戶可以在創(chuàng)建表的時候指定索引或者數(shù)據(jù)存放路徑。
MyISAM類型的表可能會損壞躏筏,損壞后的表不能被訪問板丽,但是可以修復(fù)后繼續(xù)訪問。
MyISAM支持三種類型的表:
靜態(tài)表:默認(rèn)創(chuàng)建都是靜態(tài)表趁尼,表中字段長度都是固定的埃碱,所以訪問速度非常快酥泞,缺點(diǎn)就是會占用稍微多的磁盤大小砚殿。需要注意:5.7版本以后靜態(tài)表中如果保存字段最后面帶有空格,返回數(shù)據(jù)時不會刪除空格芝囤。
動態(tài)表:保存字段長度不是固定的似炎,所以占用空間小,但是頻繁的刪除或者更新數(shù)據(jù)會產(chǎn)生碎片悯姊,所以需要定期執(zhí)行 OPTIMIZE TABLE 清理碎片羡藐。
壓縮表:壓縮表由myisampack工具創(chuàng)建,占據(jù)非常小空間悯许。因?yàn)槊織l記錄都是被單獨(dú)壓縮的仆嗦,所以訪問開支非常小。
2先壕、InnoDB
此存儲引擎是我們目前用的最多的瘩扼,支持事務(wù)、行級鎖垃僚、外鍵等等特性集绰,插入速度相對于MyISAM慢一點(diǎn),但無傷大雅谆棺,它的自動增長列可以手動指定栽燕,它的存儲方式為:元信息任然保留在xx.frm文件中,數(shù)據(jù)和索引保存在.idb中。
不支持hash索引纫谅、全文索引和數(shù)據(jù)壓縮炫贤。
3、MEMORY
顧名思義付秕,memory存儲引擎是將數(shù)據(jù)存放在內(nèi)存當(dāng)中的兰珍,這種做法也只有特殊情況下會使用到,比如為了做統(tǒng)計(jì)而生成一個臨時表存放數(shù)據(jù)询吴,這樣直接從內(nèi)存中獲取數(shù)據(jù)速度相當(dāng)快掠河。
memory存儲引擎默認(rèn)使用的是HASH索引,MyISAM和InnoDB使用的是BTREE索引猛计。
對儲存引擎為memory的表進(jìn)行操作是要謹(jǐn)慎唠摹,畢竟數(shù)據(jù)全部在內(nèi)存中,所以當(dāng)重啟數(shù)據(jù)庫時必須先進(jìn)行備份數(shù)據(jù)奉瘤。
4勾拉、MERGE
此存儲引擎實(shí)際上是一組MyISAM表的組合,這些MyISAM表必須結(jié)構(gòu)完全相同盗温,MERGE表本身沒有數(shù)據(jù)藕赞,對MERGE類型的表進(jìn)行查詢、更新卖局、刪除等操作實(shí)際上是對內(nèi)部的MyISAM表進(jìn)行操作斧蜕。例如兩個表分別為test01和test02,表結(jié)構(gòu)完全相同砚偶,他們可以組成一個存儲引擎為MERGE的表test批销,查詢test數(shù)據(jù)時,則是兩個表數(shù)據(jù)的集合染坯。
mysql在不斷的發(fā)展優(yōu)化的過程中支持分表等特性后均芽,此類存儲引擎用的越來越少。