• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > Mysql InnoDB为什么要添加跟业务无关的自增主键

Mysql InnoDB为什么要添加跟业务无关的自增主键

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了Mysql等相关知识,希望本文的分享对您有所帮助
在Mysql表设计中,通常会使用一个与业务无关的自增列做为主键。
这是因为Mysql默认使用B-Tree索引,你可以简单理解为“排好序的快速查找结构”。
如下是一个B-Tree的结构图,2层B+树,每个页面的扇出为4;并有1到6五条记录;上层记录保存每个页面的最小值;每个页面通过双向链表链接起来的;

22.png当你插入记录7时,就会发生页面分裂:

22.png

如上可见分裂产生了记录移动,但是优化后的分裂操作无需记录移动:

22.png

在InnoDB的实现中,为每个索引页面维护了一个上次插入的位置,以及上次的插入是递增/递减的标识。根据这些信息,InnoDB能够判断出新插入到页面中的记录,是否仍旧满足递增/递减的约束,若满足约束,则采用优化后的分裂策略;
所以建议使用一列顺序递增的 ID 来作为主键,但不必是数据库的autoincrement字段,只要满足顺序增加即可 。很多大型应用会有顺序递增的ID生成器。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2018-12-05mysql命令行还原phpMyAdmin导出的含有中文的SQL文件
  • 2018-12-05关于pt-heartbeat(percona toolkit)的实例代码
  • 2018-12-05SQLServer中SELECT语句的执行顺序
  • 2018-12-05sqlserver 导出插入脚本代码
  • 2017-05-11Mysql中的Datetime和Timestamp比较
  • 2018-12-05MySQL数据库常见问题汇总
  • 2018-12-05Mysql 5.7.18 解压版安装及启动实例方法
  • 2018-12-05关于mysql explain中key_len的计算方法讲解
  • 2018-12-05关于服务器监控的10篇文章推荐
  • 2018-12-05查看Oracle某个进程的环境变量

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql导出导入中文表解决方法
    • mysql实现随机查询经验谈
    • 详解mysql的limit经典用法及优化实例
    • mysql 增加和删除用户的访问权限和删除
    • mysql数据库索引操作总结
    • 获取MSSQL数据字典的SQL语句
    • SQL2008中SQL应用之-阻塞(Blocking)应用分析
    • 手动编译安装Mysql
    • MySQL中常用存储引擎有哪些?它们相互之间有什么区别?
    • mysql中使用replace替换某字段的部分内容

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有