參考資料:C語言中文網 存儲引擎: 資料庫存儲引擎是資料庫底層軟體組件,資料庫管理系統使用數據引擎進行創建、查詢、更新和刪除數據操作。 不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能,使用不同的存儲引擎還可以獲得特定的功能。 註:InnoDB 事務型資料庫的首選引擎,支持事務安全表(AC ...
參考資料:C語言中文網
存儲引擎:
資料庫存儲引擎是資料庫底層軟體組件,資料庫管理系統使用數據引擎進行創建、查詢、更新和刪除數據操作。
不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能,使用不同的存儲引擎還可以獲得特定的功能。
註:InnoDB 事務型資料庫的首選引擎,支持事務安全表(ACID),支持行鎖定和外鍵。MySQL 5.5.5 之後,InnoDB 作為預設存儲引擎。
MySQL v5.7支持的存儲引擎:
顯示可用的資料庫引擎和預設引擎的語句:
mysql> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
Support 列的值表示某種引擎是否能使用,YES
表示可以使用,NO
表示不能使用,DEFAULT
表示該引擎為當前預設的存儲引擎。
Transactions列的值表示是否支持事務,Yes表示支持,NO表示不支持。
在 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 引擎。