一、什麼是存儲引擎?
存儲引擎是MySQL中基於表提供的訪問文件的一種機制。對於MySQL來說,它提供了多種類型的存儲引擎,我們可以根據對數據處理的需求,選擇不同的存儲引擎,從而最大限度的利用MySQL強大的功能。
二、分類
InnoDB存儲引擎
①是windows下MySQL數據庫默認的存儲引擎。
②支持事務、支持行鎖、支持事務安全表(ACID)。
③支持外鍵,在存儲表中的數據時,每張表都是按照主鍵的順序進行存方放,如果在定義表時沒有指定主鍵,則InnoDB會爲每一行生成一個6字節的rowid,並以此作爲主鍵。
④不支持全文索引。
注:行鎖-》有前提,只有出現在以索引的方式查找時,進行行鎖。對於非索引項(當where條件沒有加主鍵時)加的依舊是表鎖。
★適合於需要事務支持、外鍵約束、自動災難恢復、大量updata的表中。
MyISAM存儲引擎
①是Linux下MySQL數據庫默認的存儲引擎。
②支持全文索引、表鎖、壓縮表、空間數據索引。
③不支持事務、不支持外鍵。
④當我們建立一個MyISAM引擎的表時,本地磁盤會生成三個文件。分別爲:
表名.FRM:用來存儲建表的信息
數據文件名.MYD:存儲數據(MYData)
索引文件名.MYI:存儲索引(MYIndex)
注:表鎖-》如果現在要進行select操作,系統默認就會加讀鎖。
***********************************************
* 讀鎖:指不允許外界進行write操作。 *
* 寫鎖:指不允許外界進行read和write操作。 *
***********************************************
★適合在選擇密集型(篩選速度快)和插入密集型(允許同時插入)的表中使用。
MEMORY存儲引擎
①要求存儲在MEMORY數據庫表裏的數據使用的長度是不變的,所以不支持test、blob字段。
②數據存放在內存中,速度快。
★適合存放臨時表、目標數據小且被頻繁使用的表。
ARCHIVE存儲引擎
①archive是歸檔的意思,只支持select和insert。
★壓縮型,有很好的壓縮機制,使用了zlib壓縮庫,在記錄被請求時會實時壓縮,經常用來當倉庫使用。適用於日誌文件。
三、總結
針對每個存儲引擎其特點對比如下:
功能 / 存儲引擎類型 | InnoDB | MyISAM | MEMORY | ARCHIVE |
存儲限制 | 64TB | 256TB | RAM | none |
支持事務 | yes | no | no | no |
支持全文索引 | no | yes | no | no |
支持數索引 | yes | yes | yes | no |
支持哈希索引 | no | no | yes | no |
支持數據緩存 | yes | no | N/A | no |
支持外鍵 | yes | no | no | no |
不同的存儲引擎有不同的特點,在選擇存儲引擎時,應該根據需求,使用合適的存儲引擎,從而提高整個數據庫的性能。