InnoDB是一个既稳定且高性能的通用存储引擎,在MySQL5.7下默认的存储引擎就是InnoDB。html
InnoDB的特性
InnoDB的关键特性以下:mysql
- DML语句知足ACID的事务模型。
- 行级锁和Oracle-style的一致性读,这个特性提升了用户并发度和性能。
- InnoDB在磁盘上使用primary keys结构对你的数据进行组织。每一个使用InnoDB做为存储引擎的表都有一个称为clustered index的结构组织数据来最小化主键查询时的IO次数。
InnoDB存储引擎的一些特性:sql
Storage limits |
64TB |
Transactions |
Yes |
Locking granularity |
Row |
MVCC |
Yes |
Geospatial data type support |
Yes |
Geospatial indexing support |
Yes |
B-tree indexes |
Yes |
T-tree indexes |
No |
Hash indexes |
No |
Full-text search indexes |
Yes |
Clustered indexes |
Yes |
Data caches |
Yes |
Index caches |
Yes |
Compressed data |
Yes |
Encrypted data |
Yes |
Cluster database support |
No |
Replication support |
Yes |
Foreign key support |
Yes |
Backup / point-in-time recovery |
Yes |
Query cache support |
Yes |
Update statistics for data dictionary |
Yes |
InnoDB的好处
使用InnoDB的好处:数据库
- crash recovery:在机器发生故障宕机后,只要是已提交的数据必定可以被恢复,不会丢失。
- buffer pool:将常常访问的数据缓存在内存中,加快了处理速度。在专用于数据库软件的服务器上,80%的内存都是被分配给InnoDB的buffer pool使用。
- 支持外键约束:当两个表之间存在主外键的约束关系时,删除主表的数据时,对应的外键所在的表的数据也会相应地被删除。
- 数据校验:在磁盘上的数据发生损毁时,数据校验功能能够在访问这片数据以前就发出警告不能使用这片数据。
- 对于主键字段上的order by,group by,join都会有优化,速度会很快。
- change buffering:insert,update,delete操做使用这种change buffering机制优化,使得InnoDB不仅可以对同一个表实现并发读写,而且可使被修改的数据实现流式IO。
- 性能优化对大表上的长时间查询也是有效的。当有的数据行被反复访问时,有个称为Adaptive Hash Index的特性可以优化这种状况,使访问更快,仿佛是在一个hash table中查找同样。
- 可以压缩存储表和相关的索引。
- 建索引和删索引的操做对系统性能及稳定性影响很是低。
- 使用file-per-table存储模式的表被清空数据时,它的存储空间会还给文件系统,而不是交由InnoDB存储空间来从新利用。
- 对于BLOB类型和text类型,它们在InnoDB中是做为dynamic的行格式存储,效率更高。
- 能够查询INFORMATION_SCHEMA库中的相应表,得到存储引擎的相关性能细节。
- 能够在一条SQL语句中混合查询使用不一样存储引擎的表,例如join两张分别使用了MyISAM和InnoDB的数据表。
- InnoDB在处理大数据卷方面进行了优化,可以最大化CPU的效率和性能。
- InnoDB可以处理大量的数据,即便操做系统的最大文件限制只有2GB。