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 关闭。

posted @ 2024-10-15 20:23  廖子博  阅读(5)  评论(0编辑  收藏  举报