非聚簇索引插入数据的效率为什么比聚簇索引高?

        根据《高性能MySQL》中所述, InnoDB的二级索引的叶子节点中存储的是主键值,并以此作为指向行的 指针 。这样的 策略减少了当出现行移动或者数据页分裂时二级索引的维护工作。使用主键值作为指针会 让二级索引占用更多的空间,换来的好处是,InnoDB 在移动行时无须更新二级索引中的 这个“ 指针
        也就是说,非聚簇索引的叶子结点中存储的是主键值,这个主键值起到一个指向数据的“指针”的作用。在插入新的数据时,只需要调整非聚簇索引的树结构,更新一下索引就好了。但是对于聚簇索引来说,由于叶子结点储存了数据行,如果插入的数据是按照主键顺序尚且还好,如果不是,那么InnoDB需要为这条新纪录寻找一个合适的位置,然后做页分裂操作,为新记录分配空间。页分裂会导致移动大量数据,从磁盘将目标页的数据读取到内存中,然后写到新的页,这将导致大量的随机I/O,因此降低效率。
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值