Mysql

事务的特征

  • 原子性
    • undo log 出现错误回滚业务
  • 隔离性
    • 写写操作、
      • 通过锁来实现
    • 写读操作
      • MVCC
  • 持久性
    • 由redo log实现
    • 预写式log 追加模式速度很快 要比mysql的随机写入快很多
    • 缓冲区中
      • 0 每秒同步一次
      • 1 事务提交同步写入 一般使用1
      • 2 一步写入
  • 一致性

MVCC (多版本并发控制)

版本链与Undo log

  • 事务id 该条记录的事务 trx id
  • 回滚指针 记录着上一条记录的地址
  • readview 快照读 区别于当前读 当前读的一般为写入与更新中 指导mysql具体取那条数据

readview数据结构

  • m ids 当前活跃的事务id
  • min trx id 最小的活跃事务id
  • max trx id 最大的活跃id
  • creaor trx id

ReadView如何判断版本链中的记录可用呢

版本链中的

  • trx_id == creator id 可用
  • trx_id < min_id 早于当前的事务的事务都已提交 可以获取
  • trx_id > max_id 当前的事务是在活动事务之后的 不可获取
  • min_trx_id <= trx_id<=max_trx_id 如果事务在m_ids中 不可以访问 如果不在那么可以访问

RR可重复读 RC读已提交

  • 可重复读的快照读 是在事务开始的时候进行的 公用一个快照读
  • 读已提交 在每个select都要生成readview 容易出现不可重复读问题 会读到已经提交的事务

大量数据的优化

最左前缀法则

  • 索引创建的

索引

数据结构原理

B+树的结构 叶子结点由双向链表相连

  • 飞叶子节点不存储数据
  • 只在叶子结点存储数据并且 叶子结点由双向链表链接 避免了回查这一问题
posted @   AIxuexiH  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示