看了极客世界的mysql教程里关于这个议题的talk,总结如下
查询方面:二者性能几乎一致,区别在于唯一索引只需要返回读到的第一个值,而普通索引需要向后遍历找到所有满足条件的值。但是这个操作是在内存中进行的,所以基本可以忽略;
写入方面:对于唯一索引,因为需要保证唯一性,所以每一次的写操作都必须将值读到内存中,所以如果对应的数据页不在内存中,那么肯定会有一次磁盘随机读;但是对于普通索引,因为有change buffer机制,所以,如果数据页不在内存中,不一定需要将数据页读入内存。这样,在写多读少的场景下,普通索引的写入性能是要高于唯一索引的。
建议:
如果业务没有唯一性要求,尽量使用普通索引。