从开发者角度谈Mysql主键

匠心零度 梦见 2018-02-12

点击上方“程序员小灰”,选择“置顶公众号”

有趣有内涵的文章第一时间送达!



本文转载自公众号  匠心零度


说在前面

零度mysql一直比较薄弱,俗话说的好,不会mysql的程序员不是好程序员,刚刚好认识mysql大牛刘龘刘,刚刚好就有了这些文章,主要是刘龘刘大牛写的,零度稍微修改成文,零度觉得这系列文章非常不错,可以从开发者角度看看mysql。

主题

  • 使用自增主键的好处

  • 使用非自增主键坏处

  • 总结

使用自增主键的好处

那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页

使用非自增主键坏处

由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面。

总结

如果InnoDB表的数据写入顺序能和B+树索引的叶子节点顺序一致的话,这时候存取效率是最高的。也就是下面这几种情况的存取效率最高:

  • 使用自增列(INT/BIGINT类型)做主键,这时候写入顺序是自增的,和B+数叶子节点分裂顺序一致;

  • 该表不指定自增列做主键,同时也没有可以被选为主键的唯一索引(上面的条件),这时候InnoDB会选择内置的ROWID作为主键,写入顺序和ROWID增长顺序一致;

  • 如果一个InnoDB表又没有显示主键,又有可以被选择为主键的唯一索引,但该唯一索引可能不是递增关系时(例如字符串、UUID、多字段联合唯一索引的情况),该表的存取效率就会比较差。




—————END—————




喜欢本文的朋友们,欢迎长按下图关注订阅号程序员小灰,收看更多精彩内容



本站仅按申请收录文章,版权归原作者所有
如若侵权,请联系本站删除
觉得不错,分享给更多人看到
梦见 热门文章:

漫画:编程其实是文科    阅读/点赞 : 1108/17

我是一个线程    阅读/点赞 : 693/22

漫画:三分钟了解敏捷开发    阅读/点赞 : 644/17

漫画:什么是中间人攻击    阅读/点赞 : 613/16

我是一个Java class    阅读/点赞 : 552/10

网贷遇雷潮,投资者如何避雷?    阅读/点赞 : 0/0