InnoDB中的索引都是一颗颗的B+树,普通索引和唯一索引在使用上差别在于保证索引的唯一性。
二者差别主要体现在普通索引能够通过change buffer来提高更新时的性能。
1. change buffer
使用方式
普通索引如果数据在内存中则会直接更新内存,否则将该操作缓存在change buffer中。
当下次查询需要访问这个数据页时,将这个数据页读入内存,然后执行change buffer中与这个页有关的操作。
触发时机
当把change buffer中的数据应用到数据页,得到最新结果的过程成为merge,另外数据库正常关闭的过程中,也会执行merge操作。
由于正常情况下,仅在读取数据时,才会把数据拿到buffer pool中,并且使用changer buffer,所以在这期间change buffer等于节省了内存的使用。
2. 普通索引和唯一索引具体区别
查询时,当定位到唯一索引后会停止继续查询,而普通索引会继续查询。
更新时,普通索引通过使用change buffer来延缓读写磁盘的操作。
那么普通索引和唯一索引的差别就在与此,更新数据增加了change buffer作为缓冲,普通索引效率更高
3. 为什么唯一索引不使用change buffer?
由于唯一索引更新需要查询数据是否存在,这会触发将数据从磁盘读取到内存中,change buffer就没意义了,所以change buffer并不对唯一索引起作用。