- 博客(5)
- 收藏
- 关注
原创 mvcc解读
需要注意的是,以上需要加X锁的都是当前读,而普通的select(除了for update,lock in share mode)都是快照读,每次insert、update、delete之前都是会进行一次当前读的,这个时候会上锁,防止其他事务对某些行数据的修改,从而造成数据的不一致性。快照读,读取的是记录的可见版本(可能是历史版本,即最新的数据可能正在被当前执行的事务并发修改),不会对返回的记录加锁;而当前读,读取的是记录的最新版本,并且会对返回的记录加锁,保证其他事务不会并发修改这条记录。
2023-07-11 16:20:17
86
转载 mysql回表
MRR 简单的来说就是上面的回表更加效率了,如果需要50w次的回表,效率太慢了,这时候Mysql就把需要回表的主键id进行排序,然后排序过后的id再到主键B+树去取数据库,这样就大大的增加了效率。Mysql回表指的是在InnoDB存储引擎下,二级索引查询到的索引列,如果需要查找所有列的数据,则需要到主键索引里面去取出数据。因为行的数据都是存在主键B+tree的叶子节点里面,二级索引的B+树叶子节点都是存放的(索引列,主键)。通过username索引的话:每次回表需要3次IO,50w记录需要回表50w次。
2023-07-10 15:46:04
139
转载 mysql 聚集索引和全表扫描过程
原因很简单,就是聚簇索引叶子节点的结构:叶子节点存储整行数据,包含所有列的值,但是,如下图中,绿色是索引列的值,效率高,紫色是其他列的值,效率比索引列稍慢;表有个主键索引,select id from employees2和 select age from employees2效率一样吗?InnoDB的数据是保存在主键索引(默认聚簇索引健在主键索引上)上的,所以。通过EXPLAIN得知,走主键索引和全表扫描结果不一样,但根据之前的分析,,理论上应该一样啊,那么说明原因呢?
2023-07-10 15:13:33
251
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人