目录
问题背景
在Innodb存储引擎中,主键是行唯一标识符,并且对数据的插入和读取是按页进行。行记录按主键顺序插入效率会非常高,因此插入聚集索引一般是磁盘的顺序插入,不需要随机读取。
如果表存在主键a(自动增长),对a列的插入NULL,页中数据都是按a的值顺序存放,则不需要随机读取另一个页的记录,因此效率很高。
不是所有的主键插入都是有序的,例如主键是uuid这种
但对于非聚集索引,即辅助索引,在对非聚集索引叶子节点进行插入操作时, 则需要随机访问非聚集索引页,从而导致性能下降。
解决方案
innodb引入insert buffer,来解决上述问题,对于非聚集索引的插入操作,不是每一次直接插入到索引页中,而是先判断插入的非聚集索引页是否在缓冲池中,若在,则直接插入;不在,则先放导一个Insert Buffer对象中,(假装已经插入)。然后以一定的频率将Insert Buffer和辅助索引叶子节点进行合并操作,这时通过合并多个插入到一个操作中(这些插入都在一个页中),提高插入性能。
使用条件:
- 索引是辅助索引(非聚集索引&#x