《MySQL实战45讲》学习笔记——索引(二)

本文探讨了MySQL中的普通索引和唯一索引的区别,强调了唯一索引在更新时可能的性能影响。介绍了change buffer机制及其在高写入场景下的作用,同时提醒在某些业务场景下可能需要关闭change buffer。讨论了MySQL优化器如何选择索引,并指出扫描行数、区分度统计误差等因素。提到了前缀索引的优缺点及最佳实践,包括通过查看区分度选择前缀长度,以及针对特定结构字符串的优化策略。
摘要由CSDN通过智能技术生成

普通缩影和唯一索引

普通索引和唯一索引都是二级索引。区别是唯一索引由数据库保证字段的唯一性。

查询过程中,普通索引和唯一索引的性能差不多,普通索引也就是多判断一次而已。

更新过程,普通索引可以使用change buffer优化,唯一索引因为要检查数据的唯一性,必须要将数据读入内存,可能引入磁盘的随机读,性能会下降。

使用普通索引,数据的唯一性要靠业务来保证。

change buffer机制

change buffer 就是一个内存缓存,在更新或者插入数据的时候,如果数据也不在内存中,则先将数据写入change buffer,等以后读数据的时候,将数据也读到内存再进行merge。

在写入操作很频繁的时候,由于无法使用change buffer机制,唯一索引可能成为性能瓶颈。可以通过查看缓存命中率来判断。

但是对于写完立即就读的业务来说,change buffer没什么用途,还增加了维护负担。这时候可以考虑关闭change buffer。

注意区分change buffer 和redo log。redo log 是防止内存中的数据丢失的,change buffer就是那个内存中的数据(之一)。

优化器索引选择
选错索引是MySQL优化器的策略问题。

扫描行数是优化器判断使用哪个索引的指标之一。优化器根据统计量“区分度”来估算扫描函数,但是“区分度”是采样统计的,随着数据的变化,可能变得不准确。但是优化器有纠正机制,就是在更新行数超过1/M的时候重新统计。

扫描函数的统计错误还可能出现在大量的删除或者插入执行事务中,因为为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值