mysql 应用和原理

update 执行过程

事务提交2个阶段如何保证一致性;或者说是如何恢复的?

crash 重启后:

  1. 代开redo log 和系统表空间文件IbdataN
  2. 找到最新Checkpoint ,扫描redo log 即处于prepare 状态的redo log
  3. 如果在bin log 存在记录,则commit ,否则rollback事务;

事务隔离级别:

  1. read uncommited = ru ;B session 未提交,A可以读到;赃读
  2. read commited = rc ;B session 提交后,A可以读到;
  3. repeatable read= rr ;B session 提交,不影响A 的数据;但可能幻读(增删)
  4. serializable 串行 ;不存在:赃读、不可重复读、幻读问题;效率最低

索引相关

索引设计原则:

  • where group order,关联查询 列可以添加索引;
  • 索引要适当,否则影响cud 性能;
  • 在区分度高的字段建索引,否则没有效果,即过度索引;
  • 唯一索引比不同索引性能要高;
  • 字段尽量不要null,否则可能全表扫描;
  • 多列索引:最左原则,注意使用顺序,尽量区分度高的放在左边
  • 避免隐式转换;
  • where 中避免使用函数;
  • 明确select 的字段;
  • 禁止负向查询,not in, !=,<>,!<,!>,not like
  • 缩小结果集,再join;
  • like %xx 匹配,无法使用索引;
  • or 导致索引失效;
  • 串列需要前缀索引,提高查询速度;

联合索引及其使用:

  1. 最左原则;注意索引顺序;
索引类型 补充说明
主键 唯一,不能为空,表唯一,hash 索引,准确查找,叶子节点存放的是整行数据,属于聚簇索引
唯一 唯一,可以为空,可以多个 ,hash/btree 索引,叶子节点存放的是主键的值,属于二级索引,效率低于主键索引

数据库4个特性:

  • 原子性 Atomicity
  • 一致性 Consistency
  • 隔离性 Consistency
  • 持久性 Durability

数据一致性:

  1. 接口幂等方法:
    1. 数据库唯一索引;
    2. token 一次性机制;
    3. 数据库悲观锁;
    4. 数据库乐观锁;
    5. 分布式锁:redis 、zookeeper,等
    6. 接口参数幂等:source来源,seq序列号
    7. 业务流程状态机;
    8. 异步+幂等;

数据库事务原理

数据库锁原理

WRITTEN BY:    陈贞

个人博客