转载自 从开发者角度谈Mysql主键

说在前面

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

主题

  • 使用自增主键的好处

  • 使用非自增主键坏处

  • 总结

使用自增主键的好处

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

使用非自增主键坏处

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

总结

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

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

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

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

从开发者角度谈Mysql主键相关推荐

  1. MySQL主键学习总结

    浅谈MySQL主键 主键没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为"PRIMARY KEY",主键不能重复,一个表只能有一个主键. 1.声明主键的方 ...

  2. mysql主键long_MySQL主键设计

    [TOC] 在项目过程中遇到一个看似极为基础的问题,但是在深入思考后还是引出了不少问题,觉得有必要把这一学习过程进行记录. MySQL主键设计原则 MySQL主键应当是对用户没有意义的. MySQL主 ...

  3. mysql主键自增长空缺_Mysql 主键自增长auto_increment问题分析

    本节内容: Mysql 主键自增长 在mysql数据库中,主键由auto_increment实现自增长,若自定义函数来表示auto_increment的话可以如下: 复制代码 代码示例: create ...

  4. Oracle与Mysql主键、索引及分页的区别小结

    Oracle与Mysql主键.索引及分页的区别,学习oracle的朋友可以参考下 区别: 1.主键,Oracle不可以实现自增,mysql可以实现自增. oracle新建序列,SEQ_USER_Id. ...

  5. MySQL主键(PRIMARY KEY)

    "主键(PRIMARY KEY)"的完整称呼是"主键约束".MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键 ...

  6. MySQL主键的理解

    MySQL主键的理解 主键(primary key )没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为"PRIMARY KEY",主键不能重复,一个表只能 ...

  7. mysql 主键外键sql_SQL外键VS主键说明了MySQL语法示例

    mysql 主键外键sql A Foreign Key is a key used to link two tables. The table with the Foreign Key Constra ...

  8. MySQL主键和外键使用及说明

    MySQL主键和外键使用及说明 一.外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性. 外键的使用条件:  1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后 ...

  9. mysql 主键溢出检查_详解MySQL 表中非主键列溢出情况监控

    今天,又掉坑了. 之前踩到过MySQL主键溢出的情况,通过prometheus监控起来了. 这次遇到的坑,更加的隐蔽. 是一个log表里面的一个int signed类型的列写满了.快速的解决方法当然还 ...

最新文章

  1. 计算机网络实验(华为eNSP模拟器)——第八章 动态主机配置协议(DHCP)
  2. 数据行业工作3年,我靠这7个能力,成为领导青睐的高级数据分析师
  3. 前端开发常用免费资源,显著提升工作效率
  4. ×××病毒分析工具集之File Format Identifier v1.0
  5. word2016 图片去底灰_几块钱买的葫芦,三四十双手套轮换用,他个个盘出玻璃底...
  6. Java 语言结构【转】
  7. 黑盒测试方法|测试用例的设计方法--等价类划分方法
  8. Java的三种技术架构是什么?
  9. J2EE框架技术(SpringMVC) 知识点笔记(2)
  10. FlowJO X 流式补偿调整
  11. flutter_blue使用
  12. Java笔记-面向对象(上)
  13. pytorch中view()和flatten
  14. 卖货文案不会写?试试这5个方法(二)
  15. specified sample format s16 is invalid or not supported(linux)
  16. 美国孩子上学真像你以为的那么轻松吗?
  17. 《袁老师访谈录》第九期丨陈家强教授/香港科大商学院前院长【问诊未来·院长系列:科技铺就金融创新之路】...
  18. 注塑机摆放间距多少合适_选用注塑机的基本原则
  19. 小程序和Web项目的区别
  20. 数据结构学习笔记(基本概念)

热门文章

  1. 计算机软件在矿井地质中的应用,(完整版)遥感导论知识点整理(梅安新版)
  2. [高等数学]这你不背?
  3. IDEA导入MySQL的jdbc驱动出现“java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver”
  4. [Java基础]线程安全的类
  5. [剑指offer]面试题13:在O(1)时间删除链表结点
  6. 第七届蓝桥杯(国赛)——随意组合-dfs,next_permutation
  7. 自适应滤波器在matlab仿真的程序_电气信息类专业课程之matlab系统仿真 第五章 BPSK通信系统(3)...
  8. python通过tkinter和json界面库实现考研知识点统计
  9. Codeforces Round #585 (Div. 2) F. Radio Stations 2-sat + 神仙建模
  10. Codeforces Round #703 (Div. 2) B.Eastern Exhibition 中位数结论