MySQL Storage Engines
摘要:在本教程中,您将学习各种MySQL存储引擎。 了解 MySQL 中每个存储引擎的功能至关重要,这样您才能有效地使用它们来最大限度地提高数据库的性能。 MySQL存储引擎简介 在 MySQL 中,存储引擎是一个软件组件,负责管理数据在表中的存储、检索和操作方式。 存储引擎还决定了表的底层结构和功能。 MySQL 支持多种存储引擎,每种引擎都有自己的一套功能。 要查找 MySQL 服务器上可用的存储引擎,可以使用以下查询:
SELECT
engine,
support
FROM
information_schema.engines
ORDER BY
engine;
输出:
+--------------------+---------+ | engine | support | +--------------------+---------+ | ARCHIVE | YES | | BLACKHOLE | YES | | CSV | YES | | FEDERATED | NO | | InnoDB | DEFAULT | | MEMORY | YES | | MRG_MYISAM | YES | | MyISAM | YES | | ndbcluster | NO | | ndbinfo | NO | | PERFORMANCE_SCHEMA | YES | +--------------------+---------+ 11 rows in set (0.02 sec)查询在engine列中返回11个存储引擎,在support列中返回是否支持。 如果支持栏为YES,则表示支持相应的存储引擎,否则为NO。 如果 support 列中的值为 DEFAULT,则表示支持该存储引擎并作为默认值使用。 或者,您可以使用 SHOW ENGINES 语句列出所有可用的存储引擎:
SHOW ENGINES;输出:
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | ndbinfo | NO | MySQL Cluster system information storage engine | NULL | NULL | NULL | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | ndbcluster | NO | Clustered, fault-tolerant tables | NULL | NULL | NULL | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 11 rows in set (0.00 sec)
Note that MySQL 5.5 or later uses InnoDB as the default storage engine.
要在创建新表时指定存储引擎,请在 CREATE TABLE 语句中使用 ENGINE 子句:
CREATE TABLE table_name(
column_list
) ENGINE = engine_name;
如果省略 ENGINE 子句,MySQL 将使用默认存储引擎来创建表。
MySQL存储引擎特点
下表比较了MySQL中存储引擎的特性:
特性 | MyISAM | MEMORY | CSV | ARCHIVE | BLACKHOLE | MERGE | FEDERATED | InnoDB |
---|---|---|---|---|---|---|---|---|
事物 | No | No | No | No | No | No | No | Yes |
ACID合规性 | No | No | No | No | No | No | No | Yes |
锁表 | Yes | No | Yes | Yes | Yes | No | Yes | Yes |
全文检索 | Yes | No | No | No | No | No | No | Yes |
外键约束 | No | No | No | No | No | No | No | Yes |
崩溃恢复 | No | No | No | No | No | No | No | Yes |
外部数据访问 | No | No | Yes | Yes | No | No | Yes | No |
临时表 | Yes | Yes | No | No | No | No | No | Yes |
默认存储引擎 | No | No | No | No | No | No | No | Yes |