MySQL 唯一索引和普通索引 | Change Buffer
普通索引和唯一索引性能差别
查询性能
在 InnoDB 中,每个数据页的大小默认是 16KB。
查询性能差别不大。
更新性能
change buffer:当需要更新一个数据页时,如果数据页在内存中就直接更新;如果数据页不在内存中,在不影响数据一致性的前提下,
InnoDB 会将这些更新操作缓存在 change buffer 中。在下次查询需要访问这个数据页时,将数据页读入内存,然后执行 change buffer 与这个数据页有关的操作(merge)。
除了访问数据页会触发 merge,后台线程会定期 merge,在数据库正常关闭的过程中,也会执行 merge。
唯一索引不能使用 change buffer,只有普通索引可以使用。
innodb_change_buffer_max_size
可以动态设置 change buffer 占用 buffer pool 的大小,默认是 50(表示最多占用 buffer pool 50%)。
change buffer 使用场景
对于写多读少的业务来说,页面在写完后访问到的概率比较小,此时 change buffer 使用效果最好,大量写操作可以增加 change buffer 大小,提升性能。
change buffer 不适合写完后马上访问的场景,此时可以把 change buffer 关闭。