原理是先搞懂change buffer
首先要搞清楚change buffer。
在修改一条数据的时候,例如update a set k = 1 where id =1.他不是立即去修改磁盘,而是将修改存到change buffer里。
在什么时候改呢?在查询id=1这条数据存在的数据页到内存中时,再修改。
Change buffer还会在定期写入到磁盘或者客户端关闭的时候写入,这样就减轻了update操作的时间消耗。
这是前提,先说结论,普通索引会走change buffer,唯一索引不会走。因为唯一索引在修改时会判断插入的数据是否已存在数据库,所以他得查询,既然都将数据页查到内存中了,为啥不直接改了呢,对吧,所以他不会用change buffer。
二者如何选择
普通索引能节约修改数据库的时间。其实,这两个索引差不了太多时间。能用普通索引最好,普通索引优先,由于业务原因一定要使用唯一索引就使用吧。
谢谢大家,以上是基于林晓斌的《数据库实战45讲》转化为我自己的理解,如有问题请赐教。