涉及场景
仅针对非唯一的普通索引,有性能优化效果
例子
如果一个表上有字段 a, b, 且有普通索引c。
update语句为 update xxx set a = 'xxx' where c = 'xxx', 执行这个语句的时候, 因为要判断c = 'xxx' 的记录是否存在, 存在的话才会更新, 此时必定要将c 索引的内存页载入到内存中(执行计划会走索引c) , 修改内存页,写redo log; 同时主键索引页也要载入内存进行修改(主键索引永远都需要先读后写,这个免不了)。这个就用不到Change Buffer。
但是如果是另外一种场景: update xxx set a = 'xxx' where b = 'xxx' , 这个时候因为查询条件不走索引c,故不需要将c的数据页载入内存, 针对索引c上的修改就写入到Change Buffer, 但是针对主键索引,还是要先载入内存再修改。 此时的优化就是针对索引c的页的随机io的优化。
如果还有普通索引d/e/f等,都是同样的WAL写入change buffer,不用在更新的时候立即去随机IO更新对应的索引树。
标签:场景,Buffer,xxx,载入,索引,内存,Change From: https://www.cnblogs.com/kiper/p/17737128.html