1、如果业务字段更新频繁的化,选择唯一索引还是普通索引?
如果业务上能保证唯一性的化尽量使用普通索引而不是唯一索引。
2、针对查询而言普通索引的查询是在查询到符合条件的内容以后,继续进行下一项内容查询,如果下一项不符合则返回;但是唯一索引的查询是查询到满足条件的内容直接返回,整体上少一次查询比较,但是整体效率相差不大。
3、针对更新操作来说两者就有很大的差距了。
要在更新操作上理解两者之间的差距首先理解一下change buffer。
change buffer 用来记录更新操作,在没有把要更新前数据从硬盘读取到内存时,更新操作会先记录到change buffer中,在下一次进行select的时候再把更新前数据读取到内存,然后执行change buffer中的命令进行数据合并,这个过程称为merge。
如果是唯一索引的更新的化,首先要判断一下更新的数据在库里是否存在,这时候就势必会有一个读操作,有了读操作就会把硬盘数据加载到内存。这时候针对唯一索引的更新来说change buffer的就意义不大了。
如果普通索引的更新的化,则会利用上change buffer 来减少更新时候的IO操作,提升效率。
如果读大于写或者更新操作的时候,选择普通索引和唯一索引的区别不大。如果读小于写的化,使用普通索引的效率会高,因为会使用到change buffer。如果是写完立刻查询的化,普通索引的效率也不会太好,因为会涉及到频繁的merge操作,而且还需要额外的空间。