InnoDB存储引擎简介

/ 默认分类 / 没有评论 / 525浏览

Innodb简介

InnoDB是一个兼顾高可靠性和高性能的通用存储引擎。MySQL8.0中,InnoDB是默认的MySQL存储引擎。除非配置了不同的默认存储引擎,不带ENGINE子句的CREATE TABLE语句都会创建一个InnoDB 表。

InnoDB 的主要优势

InnoDB 存储引擎特性

特征是否支持
B-tree indexesyes
Backup/point-in-time recovery (server层实现,而非存储引擎)yes
数据库集群no
聚簇索引yes
数据压缩yes
数据缓存yes
数据加密(在服务器中通过加密函数实现;MySQL5.7及更高版本中支持静态数据加密)yes
外键支持yes
全文搜索索引(MySQL 5.6 及更高版本中可用)yes
地理坐标数据支持yes
地理坐标索引支持yes
哈希索引(InnoDB 在内部利用哈希索引来实现其自适应哈希索引功能)no
索引缓存yes
锁粒度行锁
MVCCyes
复制支持(在服务器中实现,而不是在存储引擎中)yes
存储限制64TB
T树索引no
事务yes
更新数据字典的统计信息yes

使用InnoDB表的好处

InnoDB 表具有以下优点:

InnoDB最佳实践

验证 InnoDB 是默认存储引擎

SHOW ENGINES 语句以查看可用的MySQL存储引擎。在SUPPORT列中查找 DEFAULT。 也可以查询 INFORMATION_SCHEMA.ENGINES 表是一样的结果

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       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

使用 InnoDB 进行测试和基准测试

如果 InnoDB 不是默认存储引擎,可以通过在命令行上定义 --default-storage-engine=InnoDB
或者在MySQL服务器选项文件的 [mysqld] 部分中定义:

[mysqld]
default-storage-engine=innodb 

重新启动服务器来确保数据库服务器和应用程序与 InnoDB 一起正常工作

由于更改默认存储引擎只会影响新创建的表,因此运行应用程序安装和设置步骤可以确认一切安装正确,然后运行应用程序功能以确保数据加载、编辑和查询功能正常工作。 如果表依赖于特定于另一个存储引擎的功能,会收到错误消息。 在这种情况下,将 ENGINE=other_engine_name 子句添加到 CREATE TABLE 语句以避免错误。

如果没有刻意决定存储引擎,并且想预览某些表在使用 InnoDB 创建时的工作方式,可以通过对于每个表执行命令 ALTER TABLE table_name ENGINE=InnoDB; 或者在不影响原始表的情况下运行测试查询和其他语句制作一个副本:

CREATE TABLE ... ENGINE=InnoDB AS SELECT * FROM other_engine_table;

要在实际工作负载下评估完整应用程序的性能,要安装最新的 MySQL 服务器并运行基准测试。

测试整个应用程序生命周期,从安装到大量使用,再到服务器重启。数据库繁忙时kill服务器进程模拟掉电,重启服务器时验证数据是否恢复成功。 测试任何复制配置,特别是如果在源服务器和副本上使用不同的 MySQL 版本和选项。