站保站

服务市场
  • 网站市场
  • 单机游戏
  • 平台大厅
  • 转让市场
  • 发卡市场
  • 广告市场
  • 下载市场
  • 收录市场
  • 本站平台
    平台客服
    微信Q群



    平台微博/weibo    平台微信/公众号    平台抖音/快手   
    曝光台    保障    地图   
    上传资源 快速赚钱
    站保站    登录      |  注册  |  

    只需一步,快速开始!

     找回密码   |   协议
    热门搜索: 网站开发 App报毒 挖矿源码 代办资质

    mysql普通索引和唯一索引选择

    • 时间:2020-10-26 18:38 编辑:weixin_44335140 来源: 阅读:53
    • 扫一扫,手机访问
    摘要:

    提出问题

    mysql普通索引和唯一索引的区别:

    • 查找:唯一索引在找的时候,由于结果只有一个,所以根据B+数查找的时候,找到第一个满足查询条件的记录就会停止检索。而普通索引判断下一条记录是否满足,也就是说普通索引多了指针寻址和判断,但是这对于性能的影响是微乎其微的。
    • 插入和修改:普通索引在插入和修改的时候,会使用到change buffer,从而大幅提高性能。而唯一索引由于需要确保数据满足唯一性约束,所以无法使用change buffer。

    所以,普通索引和唯一索引的主要区别在于插入和修改,换个说法就是能否使用change buffer,那么change buffer就是是什么,有什么用就是我们接下来要讨论的话题。

    change buffer是什么

    change buffer中保存的是mysql的更新操作(从名字上就能看出来)。当我们在更新一个数据页的时候,如果这个数据页在内存中的话就直接更新,如果数据页不在话,就将更新操作保存在change buffer中,在下次查询需要访问这个数据页的时候,将数据页读入内存后,然后执行change buffer中与该数据页有关的操作。这样做的好处是可以减少磁盘IO次数,而磁盘IO数也是mysql时间花销最大的地方。

    为什么唯一索引不使用change buffer

    对于唯一索引来说,由于需要判断这个操作是否违反唯一性约束,所以需要先将数据页加载到内存中,而一旦数据页被加载到内存了,就没有必要使用change buffer了,可以直接修改了。

    change buffer有没有可能造成数据丢失

    既然普通索引在进行数据更新的时候,修改的操作可能会放在chang buffer中,等在下次访问这个数据页的时候在进行与该数据页相关的更新操作,那有没有可能chang buffer丢失,导致更新数据的丢失?

    答案是不会的,因为change buffer实际上是可以持久化的数据。也就是说,change buffer在内存中有拷贝,同时也会被写入到磁盘中。

    将change buffer中的操作应用的对应的数据页,得到最新的结果的过程称为merge。除了访问这个数据页会触发merge外,系统后台也会定期的merge。在数据库正常关闭的过程中,也会触发merge。

    综上,由于普通索引更新时可以通过chang buffer来减少磁盘IO的次数,所以普通索引在进行更新操作时的效率比唯一索引的效率高。所以如果可以的话,请使用普通索引。

    • 全部评论(0)
    • 最新

    信息加载中,请等待

    微信客服(速回)

    微信客服(慢回)



    企业微信客服二维码
    联系我们
    平台客服: 平台QQ客服

    平台电话:400电话迁移中!

    平台邮箱:28292383@qq.com

    工作时间:周一至周五:早10:00 晚:18:00

    营业执照     网站ICP备案:鲁ICP备20027607号-1     鲁公网安备:37068702000078号     增值电信业务经营许可证、在线数据与交易处理业务许可证:鲁B2-20200681      © 2016-2024 站保站  https://www.zhanbaozhan.com/ 版权所有!      平台规范:   关于我们   广告合作   隐私条款   免责声明   法律声明   服务条款   网站地图   平台工单!