前言:
存储引擎是数据库的外围,对于 MySQL 来说,存储引擎是以插件的模式运行的。尽管 MySQL 反对品种繁多的存储引擎,但最罕用的当属 InnoDB 了,本篇文章将次要介绍 InnoDB 存储引擎相干常识。
1. InnoDB 简介
MySQL 5.5 版本当前,默认存储引擎就是 InnoDB
了。InnoDB 是一种兼顾了高可靠性和高性能的通用存储引擎。在 MySQL 5.7 中,除非你配置了其余默认存储引擎,否则执行 CREATE TABLE 不指定 ENGINE 的语句将创立一个 InnoDB 表。
# 查看 MySQL 反对的存储引擎
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 |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
# 查看默认存储引擎
mysql> show variables like 'default_storage_engine';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
2. InnoDB 劣势
InnoDB 之所以如此受宠,次要在于其性能方面的较多劣势。
1)反对事务
InnoDB 最重要的一点就是反对事务,能够说这是 InnoDB 成为 MySQL 中最风行的存储引擎的一个十分重要的起因。此外 InnoDB 还实现了 4 种隔离级别(READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 和 SERIALIZABLE),使得对事务的反对更加灵便。
2)劫难恢复性好
InnoDB 通过 commit、rollback、crash-recovery 来保障数据的平安。
具体来说,crash-recovery 就是指如果服务器因为硬件或软件的问题而解体,不论过后数据是怎么的状态,在重启 MySQL 后,InnoDB 都会主动复原到产生解体之前的状态。
3)应用行级锁
InnoDB 扭转了 MyISAM 的锁机制,实现了行锁。尽管 InnoDB 的行锁机制是通过索引来实现的,但毕竟在数据库中大部分的 SQL 语句都要应用索引来检索数据。行锁定机制也为 InnoDB 在接受高并发压力的环境下加强了不小的竞争力。
4)实现了缓冲解决
InnoDB 提供了专门的缓冲池,实现了缓冲治理,不仅能缓冲索引也能缓冲数据,罕用的数据能够间接从内存中解决,比从磁盘获取数据处理速度要快。在专用数据库服务器上,通常会将最多 80%的物理 memory 调配给缓冲池。
5)反对外键
InnoDB 反对外键束缚,查看外键、插入、更新和删除,以确保数据的完整性。存储表中的数据时,每张表的存储都按主键程序寄存,如果没有显式在表定义时指定主键,InnoDB 会为每一行生成一个 6 字节的 ROWID,并以此作为主键。
总结:
本篇文章简略介绍了 InnoDB 存储引擎及其劣势,想深刻学习 MySQL,InnoDB 相对是一块绕不开的重点常识。对于 InnoDB 的内容还有很多,前面有机会的话能够多写写。
参考:
- https://dev.mysql.com/doc/refman/5.7/en/innodb-benefits.html
- http://c.biancheng.net/view/8021.html