mysql普通索引和唯一索引的区别:
所以,普通索引和唯一索引的主要区别在于插入和修改,换个说法就是能否使用change buffer,那么change buffer就是是什么,有什么用就是我们接下来要讨论的话题。
change buffer中保存的是mysql的更新操作(从名字上就能看出来)。当我们在更新一个数据页的时候,如果这个数据页在内存中的话就直接更新,如果数据页不在话,就将更新操作保存在change buffer中,在下次查询需要访问这个数据页的时候,将数据页读入内存后,然后执行change buffer中与该数据页有关的操作。这样做的好处是可以减少磁盘IO次数,而磁盘IO数也是mysql时间花销最大的地方。
对于唯一索引来说,由于需要判断这个操作是否违反唯一性约束,所以需要先将数据页加载到内存中,而一旦数据页被加载到内存了,就没有必要使用change buffer了,可以直接修改了。
既然普通索引在进行数据更新的时候,修改的操作可能会放在chang buffer中,等在下次访问这个数据页的时候在进行与该数据页相关的更新操作,那有没有可能chang buffer丢失,导致更新数据的丢失?
答案是不会的,因为change buffer实际上是可以持久化的数据。也就是说,change buffer在内存中有拷贝,同时也会被写入到磁盘中。
将change buffer中的操作应用的对应的数据页,得到最新的结果的过程称为merge。除了访问这个数据页会触发merge外,系统后台也会定期的merge。在数据库正常关闭的过程中,也会触发merge。
综上,由于普通索引更新时可以通过chang buffer来减少磁盘IO的次数,所以普通索引在进行更新操作时的效率比唯一索引的效率高。所以如果可以的话,请使用普通索引。
信息加载中,请等待
微信客服(速回)
微信客服(慢回)