MySQL 的所有存儲(chǔ)引擎概述
MySQL 有一個(gè)存儲(chǔ)引擎的概念,針對(duì)不同的應(yīng)用場(chǎng)景,可以選擇不同的存儲(chǔ)引擎,這也是 MySQL 區(qū)別于其他數(shù)據(jù)庫(kù)的重要特征。本章將介紹存儲(chǔ)引擎的基本概念、分類,以及如何選擇合適的存儲(chǔ)引擎。
1. MySQL 存儲(chǔ)引擎概述
MySQL 的存儲(chǔ)引擎是插件式的,用戶可以根據(jù)實(shí)際的應(yīng)用場(chǎng)景,選擇最佳的存儲(chǔ)引擎。MySQL默認(rèn)支持多種存儲(chǔ)引擎,以適應(yīng)不同的應(yīng)用需求。
MySQL 5.7 支持的存儲(chǔ)引擎有:InnoDB、MyISAM、MEMORY、CSV、MERGE、FEDERATED 等。從 5.5.5 版本開始,InnoDB 成為 MySQL 的默認(rèn)存儲(chǔ)引擎,也是當(dāng)前最常用的存儲(chǔ)引擎,5.5.5 版本之前,默認(rèn)引擎為 MyISAM。創(chuàng)建新表時(shí),如果不指定存儲(chǔ)引擎,MySQL 會(huì)使用默認(rèn)存儲(chǔ)引擎。
使用以下命令,查看數(shù)據(jù)庫(kù)當(dāng)前的默認(rèn)引擎:
mysql> show variables like 'default_storage_engine';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.00 sec)
使用以下命令,查看數(shù)據(jù)庫(kù)當(dāng)前所支持的存儲(chǔ)引擎:
mysql> show engines\G
*************************** 1. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 2. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 5. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 6. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 8. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 9. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
9 rows in set (0.00 sec)
每一行的含義大致如下:
- Engine:存儲(chǔ)引擎名稱;
- Support:不同值的含義為:
- DEFAULT:表示支持并啟用,為默認(rèn)引擎;
- YES:表示支持并啟用;
- NO:表示不支持;
- DISABLED:表示支持,但是被數(shù)據(jù)庫(kù)禁用。
- Comment:存儲(chǔ)引擎注釋;
- Transactions:是否支持事務(wù);
- XA:是否支持XA分布式事務(wù);
- Savepoints:是否支持保存點(diǎn)。
創(chuàng)建表時(shí),ENGINE 關(guān)鍵字表示表的存儲(chǔ)引擎。如下例子中,表 a 的存儲(chǔ)引擎為 InnoDB,表 b 的存儲(chǔ)引擎為 MyISAM。
mysql> create table a (id int) ENGINE = InnoDB;
Query OK, 0 rows affected (0.01 sec)
mysql> create table b (id int) ENGINE = MyISAM;
Query OK, 0 rows affected (0.01 sec)
也可以使用 show table status
命令查看表的相關(guān)信息。
mysql> show table status like 'a'\G
*************************** 1. row ***************************
Name: a
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 1
Avg_row_length: 16384
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2020-04-21 02:29:06
Update_time: 2020-04-29 00:24:17
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
每一行的含義大致如下:
- Name:表名;
- Engine:表的存儲(chǔ)引擎類型;
- Version:版本號(hào);
- Row_format:行的格式
- Rows:表中的行數(shù);
- Avg_row_length:平均每行包含的字節(jié)數(shù);
- Data_length:表數(shù)據(jù)的大?。▎挝蛔止?jié));
- Max_data_length:表數(shù)據(jù)的最大容量;
- Index_length:索引的大?。▎挝蛔止?jié));
- Data_free:已分配但目前沒有使用的空間,可以理解為碎片空間(單位字節(jié));
- Auto_increment:下一個(gè) Auto_increment 值;
- Create_time:表的創(chuàng)建時(shí)間;
- Update_time:表數(shù)據(jù)的最后修改時(shí)間;
- Check_time:使用check table命令,最后一次檢查表的時(shí)間;
- Collation:表的默認(rèn)字符集和字符列排序規(guī)則;
- Checksum:如果啟用,保存的是整個(gè)表的實(shí)時(shí)校驗(yàn)和;
- Create_options:創(chuàng)建表時(shí)指定的其他選項(xiàng);
- Comment:表的一些額外信息。
2. 小結(jié)
本小節(jié)介紹了 MySQL 存儲(chǔ)引擎的基本概念,以及一些相關(guān)命令,如查看當(dāng)前默認(rèn)引擎、查看數(shù)據(jù)庫(kù)當(dāng)前所支持的存儲(chǔ)引擎、查看表的相關(guān)信息等。