普通索引和唯一索引性能对比

本文探讨了唯一索引与普通索引在读取和更新性能上的对比,指出普通索引在大多数情况下效率更高,并提供索引选择策略:除非特殊情况,建议优先选择普通索引。还介绍了InnoDB的changebuffer机制如何影响更新性能。
摘要由CSDN通过智能技术生成

读取性能

  • 唯一索引读取流程:查到目标值,停止查询,返回结果,因为目标值是唯一的。
  • 普通索引读取流程:查到目标值,一直查到下一个值与目标值不相等时,停止查询,返回结果。
  • 对比:因为MySQL每次查询,是将磁盘中的一个16KB大小的数据页读取到内存中,即使唯一索引只查询一个值,也要读取整个数据页,所以两者读取性能相差微乎其微。

 

更新性能:

  • 普通索引更新流程:将更新的数据缓存到 change buffer 中,更新结束。
  • 唯一索引更新流程:将数据页读入内存,判断有没有冲突,更新数据,更新结束。
  • 对比:普通索引性能除了在一些特殊场景下(更新完记录,马上要查询),性能表现较好。

 

索引选择:

尽量选普通索引。特殊场景:更新完记录,马上伴随着查询该记录,建议关闭 change buffer 。

 

change buffer:当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InnoDB会将这些更新操作缓存在 change buffer 中,在下次查询需要访问这个数据页时(系统也会定期 merge ),将数据读入内存,然后执行 change buffer 中与这个数据页有关的操作(更新相关数据) ,这个过程称为 merge 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值