mysql笔记系列(七)唯一索引和普通索引的性能区别

普通索引和唯一索引,应该怎么选择?
在innodb中每个页的大小为16kb,读一条记录时以页为单位读入内存。

普通索引查找数据的时候,会将符合条件的都找出来
唯一索引,只要找到第一条符合条件的,就会立刻返回,不再继续找了,因为唯一的约束已经事先确保了只有一条符合条件。
但是对查询来说,以上两种 如果数据都只有1条,时间是相似的,微乎其微。

change buffer
当更新一个数据页的时候,如果数据页在内存中就直接更新,如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,innoDB会将这些更新操作缓存到change buffer中,这样就不需要从磁盘中读入这个数据页了,下次遇到这个数据页读到内存的时候,就把changebuffer中的更新merege到 这个数据页上面。

注意:虽然是叫changeBuffer 但是这个也是会持久化到硬盘中的。 merege操作除了在访问数据页的时候会触发,在系统后台也会定期merege ,在数据库正常关闭(shutdown)的过程中,也会执行merge操作。

这个优化 把更新操作在内存中进行,减少磁盘的读写,可以极大提高性能。

changerbuffer不能被唯一索引用到,因为唯一索引每次更新都要判断这个操作是否违反唯一性约束,比如说要插入某个数据,要先判断其是否已经存在,那就必须要将这个数据页读入内存中才知道,既然都读入到内存中,那么直接更新就好了,不需要changebuffer。 因此这个只能被普通索引用到。

那么对于插入来说,
1.如果目标数据页在内存中
普通索引
先找到数据位置,然后插入<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值