InnoDB中普通索引和唯一索引的区别

Posted by KANG's BLOG on Sunday, August 14, 2022

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并不对唯一索引起作用。