InnoDB是一个既稳定且高性能的通用存储引擎,在MySQL5.7下默认的存储引擎就是InnoDB。
InnoDB的特性
InnoDB的关键特性如下:
- DML语句满足ACID的事务模型。
- 行级锁和Oracle-style的一致性读,这个特性提高了用户并发度和性能。
- InnoDB在磁盘上使用primary keys结构对你的数据进行组织。每个使用InnoDB作为存储引擎的表都有一个称为clustered index的结构组织数据来最小化主键查询时的IO次数。
InnoDB存储引擎的一些特性:
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。
时间: 2024-10-05 12:57:20