mysql

mysql

基础ACID、三范式

索引

作用

  1. 利用数据结构和算法对存储的数据进行排序,快速定位一条数据
  2. 减少数据扫描行数

种类

B树索引

  1. 最左匹配原则
  2. 遇到like关键字"%"在最左侧不生效
  3. 可以匹配范围值

哈希索引

  1. 只有heap/memory引擎才能显示支持
  2. 只包含哈希值和行指针,查数据需要回表
  3. 无法用于排序,只支持等值比较
  4. 哈希冲突多的话不好维护

mvcc(多版本并发控制)

利用了三个隐式字段、ReadView和Undo Log实现,主要判断数据可读性方式在345

  1. 三个隐式字段分别是隐藏行id、操作该条数据当前事务id、回滚指针
  2. ReadView是指该行维护的读试图。read committed级别中是每次read操作生成一次,repeatable read中每个事务在开始查询(即select)的时候生成一个ReadView。
  3. 如果被访问版本的 trx_id 属性值小于 m_ids 列表中最小的事务id,表明生成该版本的事务在生成 ReadView 前已经提交,所以该版本可以被当前事务访问。
  4. 如果被访问版本的 trx_id 属性值大于 m_ids 列表中最大的事务id,表明生成该版本的事务在生成 ReadView 后才生成,所以该版本不可以被当前事务访问。
  5. 如果被访问版本的 trx_id 属性值在 m_ids 列表中最大的事务id和最小事务id之间,那就需要判断一 下 trx_id 属性值是不是在 m_ids 列表中,如果在,说明创建 ReadView 时生成该版本的事务还是 活跃的,该版本不可以被访问;如果不在,说明创建 ReadView 时生成该版本的事务已经被提交, 该版本可以被访问。
posted @ 2022-06-13 00:10  哇哇咔哇咔咔  阅读(24)  评论(0)    收藏  举报