1、索引、视图、存储过程、事务
2、数据库引擎
3、数据库优化
4、数据库迁移、灾备
一、索引
索引类型:普通索引、唯一索引、聚合索引、非聚合索引
1、原理:
2、优缺点:
唯一索引保证表中数据唯一、加快查询速度、加强表之间的联系
额外占用物理空间、会根据数据库表的CURD而变动
3、使用场景
经常需要搜索的列
数据改变量小的表(比如用户表)
经常使用的where语句条件的列
定义为text、image、bit的列不应该使用索引
二、事务
ACID 原子性、一致性、隔离性、持久性
MySQL隔离级别是 可重复读
Oracle隔离级别是 读已提交
四种隔离级别:
- 读未提交、
- 读已提交、
- 可重复读 可读取前一个事务修改的数据
- 串行化 一个一个排队读取数据,A事务操作完才执行B事务
三、表锁、行锁
- 页级:引擎 BDB。
- 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行
- 行级:引擎 INNODB , 单独的一行记录加锁
存储引擎MyISAM是表级锁
- 锁的作用:解决并发访问的一致性
- 表级锁 只有持有表级锁的线程才可以进行更新,其他的读、写操作都会等待,直到锁释放
- 页面锁
- 并发锁:解决同时插入、更新等操作,MyISAM可以设置并发锁
- 怎么添加表级锁:MyISAM存储引擎 在执行查询、更新等操作会自动添加表级锁
存储引擎InnoDB是行级锁
与MyISAM区别:支持事务、采用行级锁
InnoDB实现行锁方式
只有通过索引查询数据的时候,才会使用行锁,否则使用表锁
InnoDB什么时候用表锁
1、事务需要更新大部分或者全部数据,如果使用默认行锁,更新效率较低,而且可能死锁、锁等待时间长
2、事务涉及多个表,使用行锁,很可能产生死锁,造成大量事务回滚
死锁
预防死锁:添加锁的等待时间
死锁后解决方法:kill掉线程
参考链接:
https://www.cnblogs.com/chenqionghe/p/4845693.html
https://www.jb51.net/article/50047.htm
参考链接