change buffer
参考
介绍和使用的场景
change buffer
可以算是Insert Buffer
的升级。Change Buffer
适用的对象依然是 非唯一的辅助索引。
Change Buffer
的适用场景是: 非唯一索引的更新操作当需要对于一个数据页进行更新操作的时候,如果数据页在内存中那就直接进行更新好了。如果不在的话,在不影响数据一致性的情况下, 将更新操作缓存在change buffer 中。下一次查询需要访问这个数据页的时候会将数据页读到内存中然后执行change buffer中与这个页相关的操作。
为什么唯一索引不如普通索引适用change buffer
对于唯一索引来说,更新操作需要 首先判断这个操作是否是违反了唯一性的约束(就是需要将数据页读如内存看一下是不是唯一的),如果都读入内存了就没必要用
change buffer
了, 直接在内存修改就行了对于 普通索引来说,更新的时候如果目标内存页不在内存中,将更新记录在
change buffer
,语句的执行就结束了
change buffer怎么提升性能的?
将数据从磁盘中读取出来到内存中涉及
随机IO
的访问,是数据库的成本最高的操作之一。
change buffer
减少了随机磁盘的访问,提升了更新的性能
change buffer适用场景
理想情况:
merge
是数据进行更新的时刻,最理想的情况就是change buffer记录了很多的记录之后进行才进行merge
.这就要求读的操作要少一点,如果是读很多,每次写完change buffer就要更新,随机IO不会减少
- 写多读少,最为适用change buffer