一、概念
1.1 引擎
- 引擎是一种储存机制、索引技巧,不同的引擎拥有不同的锁定水平
- mysql数据库中负责执行I/O操作的组件
1.2 存储格式
存储方式 | 解释 | 优势 | 劣势 |
静态表 | 非可变字段,记录的为固定长度 | 存储迅速,故障易恢复 | 占用空间大 |
动态表 | 包含可变字段,记录长度不固定 | 占用空间少 | 容易有碎片,恢复麻烦 |
压缩表 | 由myisamchk工具创建,压缩每条记录 | 访问开支非常小 | 较麻烦 |
二、常用引擎
2.1 MyISAM
2.1.1 特点
- 不支持事务/外键约束
- 文件与索引分开储存
- 占用资源较少
- 单独读/写速度快
- 读写互相阻塞
- 表级别锁定
- 支持动态表、静态表、压缩表的存储方式
2.1.2 存储方式
文件后缀 | 存储内容 |
.frm | 存储表结构 |
.MYD | 存储表数据 |
.MYI | 存储索引 |
2.2.3 应用场景
- 单独读取/写入较多的场景
- 不需要事务支持的场景
- 服务器硬件资源较差的场景
2.2 InnoDB(5.5.5版本后的默认引擎)
2.2.1 特点
- 支持事务/外键约束
- 占用空间大
- 索引与表存储在一起
- 读写可同时进行
- 行/表级锁定(有索引:行级锁、没索引:表级锁、全文索引:表级锁)
2.2.2 应用场景
- 需要事务支持
- 需要行级锁定
- 业务数据更新频繁(论坛类)
- 业务数据一致性要求高(金融业)
三、命令
3.1 临时修改引擎
show table status from 库名 where name='表名'\G #查看表引擎类型 alter table 表名 engine=引擎; #修改表引擎类型 create table 表名(字段1 类型...) engine=引擎; #创建表时选择引擎类型
3.2 修改默认引擎
vim /etc/my.cnf #进入mysql配置文件 [mysqld] #在mysqld子配置文件下 default-storage-engine=引擎; #修改默认引擎 systemctl restart mysql.service #重启mysql服务后生效
四、死锁
4.1 死锁原因
- 不同事务相互等待对方资源,最后形成环路造成死锁
4.2 解决方案
- 关闭某一个事务
- rollback回档
4.3 优化方案
- 以固定顺序访问表和行
- 大事务拆成小事务执行
- 同一事务,尽可能一次锁定所有需要资源
- 条件允许的情况下,降低隔离级别
- 添加合理的索引,减小死锁的概率
五、思维导图