数据库之存储引擎

1. 存储引擎的概念

存储引擎是MYSQL数据库的组件,负责执行时间的数据I/O操作(数据的存储和提取),工作在文件系统之上,数据库的数据会先传到存储引擎,再按照存储引擎的存储格式保存到文件系统。

(常用的存储引擎: InnoDB MyISAM)

2. MyISAM 与 InnoDB 的区别

MyISAM : 不支持事务、外键约束,只支持表级锁定,适合单独的查询和插入的操作,读写会相互阻塞,支持全文索引,硬件资源占用较小,数据文件和索引文件是分开存储的。(存储成三个文件:表结构文件 .frm  数据文件.MYD 索引文件 .MYI)

使用场景:适用于不需要事务支持,单独的查询或插入数据的业务场景。

InnoDB : 支持事务,外键约束,支持行级锁定(在全表扫描时仍然会表级锁定),读写并发能力较好,支持全文索引(5.5版本之后),缓存能力较好可以减少磁盘IO压力,数据文件也是索引文件。(存储成两个文件:表结构文件 .frm  数据文件 .ibd)

使用场景:适用于需要事务的支持,一致性要求较高,数据会频繁更新,读写并发高的业务场景。

3. 查看表的存储引擎

show create table 表名
show table status [from 库名] where name ='表名' \G
show engines            查看当前当前系统支持的存储引擎
alter table 表名 engine=InnoDB/MYISAM           针对已存在的表修改存储引擎
create table 表名 (....) engine=InnoDB/MyISAM; 新建表时指定存储引擎
修改表的默认存储结构
vim /etc/my.cnf
[mysqld]
default-storage-engine=InnoDB/MyISAM 设置新建表的默认存储引擎。

数据库之存储引擎_第1张图片

数据库之存储引擎_第2张图片

数据库之存储引擎_第3张图片

数据库之存储引擎_第4张图片

数据库之存储引擎_第5张图片

数据库之存储引擎_第6张图片

4. 死锁的概念

死锁是指两个或多个事务在同一个资源上相互占用,并请求对方的锁定资源,从而导致恶性循环的现象。

5. 如何避免死锁?

1. 设置事务超时等待时间 innodb_lock_wait_timrout

2. 设置开启死锁检测        innodb_dead lock_detect

3. 使用更合理的业务逻辑

4. 尽量保持事务简短

5. 为表添加合理的索引,减少死锁发生的概率

6. 如果业务允许,可以降低隔离级别,比如采用提交读

7. 建议开发人员在读多写少的场景下使用乐观锁机制。

你可能感兴趣的:(数据库)