乐趣区

关于mysql:InnoDB存储引擎简介

前言:

存储引擎是数据库的外围,对于 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

退出移动版