查询过程:
查询会把数据从磁盘上读取到内存中,Innodb是按数据页为单位来读写的,每个数据页的大小为16KB;
普通索引较唯一索引多了一次回索引表比较,所以总体对性能影响不大,可以忽略,所以二者在查询上性能差不多
更新过程:
更新会用到一个概念change_buffer
唯一索引:唯一索引需要判断数据页的唯一性,如果需要插入数据的数据页不存在内存中,就要从磁盘中读取,所以数据总会在内从中,不需要使用change_buffer。
普通索引:在内存中存在要插入数据的数据页时,直接更新内存数据,但是如果内存中不存在时,不需要从磁盘中读取数据,更新语句可以直接记录在change_buffer中,等到查询或是后台定时脚本执行merger操作,将数据存储到磁盘中。
结论:
如果MySQL出现内存命中率低的时候,可以考虑是不是使用唯一索引的原因
一般情况下,需要大量写操作的数据库,推荐使用普通索引,唯一索引会增加IO消耗
redolog 主要节省的随机写磁盘的IO消耗,普通索引重要节省的是随机读磁盘的IO消耗
网友评论