mysql实战45讲学习笔记--09

09普通索引和唯一索引应该怎么选择

        查询过程一般平均性能,对于选择索引可以忽略不计。

更新过程

        Change buffer,更新一个数据时,如果数据页在内存中就直接更新,如果没在内存中,不影响数据一致性,InnoDB会将这些更新操作缓存在change buffer中,然后下次查询需要访问这数据也的时候,将数据页读入内存。
        Change buffer是可持久化的数据,在内存中有拷贝,也会被写入磁盘。
        将change buffer中的操作应用到原数据页,得到最新结果过程称为merge。访问数据页会触发merge,系统后台会定期merge,数据库正常关闭也会merge。
        只有在普通索引更新的时候才是用change buffer。
        Change buffer用的是 buffer pool里面的内存,因此不能无限增大,change buffer的大小可以通过参数innodb_change_max_size来动态设置。

        如果记录要更新的目标页在内存中,普通索引和唯一索引消耗CPU的时间差不多。
        记录要更新的目标页不在内存中。这时流程
     唯一索引,需要将数据页读入内存,判断到没有冲突,插入这个字,语句执行结束。
    普通索引,则是将更新记录在change buffer,语句执行完成
        将数据重磁盘写入内存涉及随机IO访问,是数据库成本最高的操作,change buffer减少了随机磁盘访问,因此对性能提升明显。
        对于写多读少的业务来说,页面写完之后马上被访问概率比较小,因此change buffer使用效果最好,这种业务类型常见的就是账单类,日志类的系统。

  建议你尽量选择普通索引。

        如果所有的更新后面,都马上伴随着对这个记录的查询,那么你应该关闭 change buffer。而在其他情况下,change buffer 豆浆提升更新性能。
        Redo log主要节省的是随机写磁盘的IO消耗(转成顺序写),change buffer主要节省的则是随机写磁盘的IO消耗。

                                                        --流水不争先,争的是滔滔不绝。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值