MySQL InnoDB存储引擎(一):简介
对于MySQL,大家应该不会陌生,对于数据库,其最重要核心的功能就是如何存储,检索数据库,这将取决于其使用的存储引擎,在MySQL中,有一些可选的存储引擎,如InnoDB,MyISAM,MEMORY等,其中使用最为广泛的则是InnoDB,因为无论从高可用和高性能等方面,其能满足大多数的应用场景,本文将对MySQL的InnoDB存储引擎作一些基本简介,将基于MySQL 5.7。
InnoDB存储引擎简介
InnoDB作为比较通用的存储引擎,其在高可用和高性能两方面作了较好的平衡,因此也作为了MySQL的默认存储引擎。相较于其他存储引擎,InnoDB有几点关键的优势:
下表是InnoDB的一些特性:

使用InnoDB表的好处
相较于MyISAM等存储类型的表,InnoDB表具有以下一些优势:
有关InnoDB表的最佳实践
以下是使用InnoDB表的一些最佳实践:
检查数据库是否支持InnoDB存储模型
可以通过SHOW ENGINGES来检查当前数据库是否支持InnoDB:
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 |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 或者直接查询INFORMATION_SCHEMA库的ENGINES表:
mysql> use INFORMATION_SCHEMA;mysql> SELECT * FROM ENGINES;# 同上 若ENGINES中没有InnoDB,则可能需要重新安装支持InnoDB的MySQL版本;若InnoDB没有开启,在启动Mysql时,去掉skip-innodb相关的选项(这些选项在MySQL 5.7.5及之后已经无效)。另外,可以通过--default-storage-engine=InnoDB指定InnoDB为默认的存储引擎。
若想禁用InnoDB存储引擎,可以在启动MySQL时使用--innodb=OFF参数。
InnoDB与ACID模型
ACID模型作为数据库设计的重要原则,其强调了对业务数据和关键应用的可靠性方面的重要性。MySQL包含了一些组件,如InnoDB存储引擎,实现了ACID模型,这样可以保证数据不会损坏,或者不会因为软件崩溃和硬件故障导致数据异常。当你的应用需要依赖ACID特性时,就不再需要再作一致性校验和故障恢复等。如果你的应用已经从程序上保证了一定的一致性,或者具有高可靠的意见,又或应用允许一定的数据不一致,丢失等,那么你可以调整MySQL的ACID可靠性配置,以获取更好的性能或吞吐量。
InnoDB存储引擎如何与ACID模型相互作用
Atomicity(原子性)
InnoDB中原子性主要体现在事务: