什么是存儲引擎?
數據庫存儲引擎是數據庫底層軟件組件,數據庫管理系統使用數據引擎進行創建、查詢、更新和刪除數據操作。不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能,使用不同的存儲引擎還可以獲得特定的功能。
現在許多數據庫管理系統都支持多種不同的存儲引擎。MySQL 的核心就是存儲引擎。
InnoDB 事務型數據庫的首選引擎,支持事務安全表(ACID),支持行鎖定和外鍵。MySQL 5.5.5 之后,InnoDB 作為默認存儲引擎。
MyISAM 是基於 ISAM 的存儲引擎,並對其進行擴展,是在 Web、數據倉儲和其他應用環境下最常使用的存儲引擎之一。MyISAM 擁有較高的插入、查詢速度,但不支持事務。
MEMORY 存儲引擎將表中的數據存儲到內存中,為查詢和引用其他數據提供快速訪問。
MySQL 5.7 支持的存儲引擎
MySQL 支持多種類型的數據庫引擎,可分別根據各個引擎的功能和特性為不同的數據庫處理任務提供各自不同的適應性和靈活性。在 MySQL 中,可以利用 SHOW ENGINES 語句來顯示可用的數據庫引擎和默認引擎。
MySQL 提供了多個不同的存儲引擎,包括處理事務安全表的引擎和處理非事務安全表的引擎。在 MySQL 中,不需要在整個服務器中使用同一種存儲引擎,針對具體的要求,可以對每一個表使用不同的存儲引擎。
MySQL 5.7 支持的存儲引擎有 InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE 等。
可以使用SHOW ENGINES
語句查看系統所支持的引擎類型,結果如圖所示。
Support 列的值表示某種引擎是否能使用,YES
表示可以使用,NO
表示不能使用,DEFAULT
表示該引擎為當前默認的存儲引擎。
如何選擇 MySQL 存儲引擎
不同的存儲引擎都有各自的特點,以適應不同的需求,如表所示。為了做出選擇,首先要考慮每一個存儲引擎提供了哪些不同的功能。
功能 | MylSAM | MEMORY | InnoDB | Archive |
---|---|---|---|---|
存儲限制 | 256TB | RAM | 64TB | None |
支持事務 | No | No | Yes | No |
支持全文索引 | Yes | No | No | No |
支持樹索引 | Yes | Yes | Yes | No |
支持哈希索引 | No | Yes | No | No |
支持數據緩存 | No | N/A | Yes | No |
支持外鍵 | No | No | Yes | No |
可以根據以下的原則來選擇 MySQL 存儲引擎:
- 如果要提供提交、回滾和恢復的事務安全(ACID 兼容)能力,並要求實現並發控制,InnoDB 是一個很好的選擇。
- 如果數據表主要用來插入和查詢記錄,則 MyISAM 引擎提供較高的處理效率。
- 如果只是臨時存放數據,數據量不大,並且不需要較高的數據安全性,可以選擇將數據保存在內存的 MEMORY 引擎中,MySQL 中使用該引擎作為臨時表,存放查詢的中間結果。
- 如果只有 INSERT 和 SELECT 操作,可以選擇Archive 引擎,Archive 存儲引擎支持高並發的插入操作,但是本身並不是事務安全的。Archive 存儲引擎非常適合存儲歸檔數據,如記錄日志信息可以使用 Archive 引擎。
提示:使用哪一種引擎要根據需要靈活選擇,一個數據庫中多個表可以使用不同的引擎以滿足各種性能和實際需求。使用合適的存儲引擎將會提高整個數據庫的性能。
MySQL 默認存儲引擎
InnoDB 是系統的默認引擎,支持可靠的事務處理。
使用下面的語句可以修改數據庫臨時的默認存儲引擎
SET default_storage_engine=< 存儲引擎名 >
注意:將 MySQL 數據庫的臨時默認存儲引擎修改為 其他的存儲引擎時 ,但是當再次重啟客戶端時,默認存儲引擎仍然是 InnoDB。