mysql
mysql
基础ACID、三范式
索引
作用
- 利用数据结构和算法对存储的数据进行排序,快速定位一条数据
- 减少数据扫描行数
种类
B树索引
- 最左匹配原则
- 遇到like关键字"%"在最左侧不生效
- 可以匹配范围值
哈希索引
- 只有heap/memory引擎才能显示支持
- 只包含哈希值和行指针,查数据需要回表
- 无法用于排序,只支持等值比较
- 哈希冲突多的话不好维护
mvcc(多版本并发控制)
利用了三个隐式字段、ReadView和Undo Log实现,主要判断数据可读性方式在345
- 三个隐式字段分别是隐藏行id、操作该条数据当前事务id、回滚指针
- ReadView是指该行维护的读试图。read committed级别中是每次read操作生成一次,repeatable read中每个事务在开始查询(即select)的时候生成一个ReadView。
- 如果被访问版本的 trx_id 属性值小于 m_ids 列表中最小的事务id,表明生成该版本的事务在生成 ReadView 前已经提交,所以该版本可以被当前事务访问。
- 如果被访问版本的 trx_id 属性值大于 m_ids 列表中最大的事务id,表明生成该版本的事务在生成 ReadView 后才生成,所以该版本不可以被当前事务访问。
- 如果被访问版本的 trx_id 属性值在 m_ids 列表中最大的事务id和最小事务id之间,那就需要判断一 下 trx_id 属性值是不是在 m_ids 列表中,如果在,说明创建 ReadView 时生成该版本的事务还是 活跃的,该版本不可以被访问;如果不在,说明创建 ReadView 时生成该版本的事务已经被提交, 该版本可以被访问。