作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL(本章节)
PostgreSQL
Redis
Etcd
通过前面一个小节的介绍,我们对数据引擎有一个简单的认识,今天我们来介绍一个目前大面积使用的另外一个引擎:InnoDB。
这是 InnoDB 最核心的特性,也是它取代 MyISAM 成为默认引擎的主要原因。
RESTRICT
, CASCADE
, SET NULL
等)自动处理子表(外键表)中的对应数据,防止出现“孤儿数据”。.frm
文件(存储表定义,MySQL 8.0 后移至数据字典)和一个 表空间。OPTIMIZE TABLE
操作。ibdata1
。innodb_file_per_table=ON
)。启用后,每张表的数据和索引会单独存储在一个 .ibd
文件中。这样做的好处是:OPTIMIZE TABLE
操作。#前面是myisam引擎,后面是innodb引擎
-rw-r----- 1 mysql mysql 8672 Sep 16 21:35 myisam_table.frm
-rw-r----- 1 mysql mysql 0 Sep 16 21:35 myisam_table.MYD
-rw-r----- 1 mysql mysql 1024 Sep 16 21:35 myisam_table.MYI
-rw-r----- 1 mysql mysql 8646 Sep 16 21:34 users.frm
-rw-r----- 1 mysql mysql 114688 Sep 16 21:34 users.ibd
特性 | InnoDB | MyISAM |
---|---|---|
事务 | 支持 (ACID) | 不支持 |
锁机制 | 行级锁 | 表级锁 |
外键 | 支持 | 不支持 |
并发性能 | 非常高 (MVCC) | 有限 (表锁制约) |
COUNT(*) | 需要扫描表或索引(较慢) | 非常快(存储了精确行数) |
全文索引 | MySQL 5.6+ 支持 | 支持(较早版本更好) |
存储文件 | .frm + .ibd (独立表空间) 或 ibdata1 | .frm, .MYD (数据), .MYI (索引) |
崩溃恢复 | 优秀 (Redo/Undo Log) | 较差,易损坏 |
主要应用 | 绝大多数场景:OLTP、高并发、需要事务 | 只读/读远大于写、不需要事务、全文搜索(旧版) |