当前位置: 首页 > news >正文

设计 MySQL 数据表的时候一般都有一列为自增 ID,这样设计原因是什么,有什么好处?...

知乎采集:

MyISAM/InnoDB默认用B-Tree索引(可理解为"排好序的快速查找结构")。

InnoDB中,主索引文件上直接存放该行数据,称为聚簇索引。次索引指向对主键的引用;
MyISAM中,主索引和次索引,都指向物理行(磁盘位置);

注意: 对InnoDB来说
1: 主键索引既存储索引值,又在叶子中存储行的数据;
2: 如果没有定义主键,则会使用非空的UNIQUE键做主键 ; 如果没有非空的UNIQUE键,则系统生成一个6字节的rowid做主键;

聚簇索引中,N行形成一个页。如果碰到不规则数据插入时,会造成频繁的页分裂(因为索引要排好序),插入速度比较慢。所以聚簇索引的主键值应尽量是连续增长的值,而不是随机值(不要用随机字符串或UUID),否则会造成大量的页分裂与页移动。

故对于InnoDB的主键,尽量用整型,而且是递增的整型。这样在存储/查询上都是非常高效的。


作者:阿烈
链接:https://www.zhihu.com/question/28703540/answer/41805377
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 
 
InnoDB 使用两种索引来组织数据,Clustered Index 和 Second Index 
Clustered Index 与 主键有千丝万缕的关系,可以简单认为是相等关系,数据存储会按照主键来进行排序。
如果在建表的时候不提供主键,InnoDB 会自动生成一个主键,这个主键是字符式的,所以当有新数据进来的时候,原先的排序会被打乱,中间的开销会很高。简单说就是那棵树的左旋右旋,很麻烦。
使用自增 ID 充当主键,就可以解决这个问题了,相应的 Second Index 的查询效率也会变高


作者:匿名用户
链接:https://www.zhihu.com/question/28703540/answer/41794747
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 
不谈高逼格东西,从普通人角度来认识。一,id,如同身份证号,名字可以重复,但身份证号是唯一的;二,自动增长,从编程角度来说,更简便,不用花心思去管这块了;三,优势呢,两个表关联,可能用到id,查找记录,可能用到id,就把它当警察叔叔通过身份证号码来找你一样性质——没身份证号码,天不会塌,但会乱。。。


作者:沈磊
链接:https://www.zhihu.com/question/28703540/answer/41864615
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

转载于:https://www.cnblogs.com/ExMan/p/10392608.html

相关文章:

  • 买盘+卖盘≠成交量
  • 主题模型--机器学习
  • 初探C#3.0
  • (6)设计一个TimeMap
  • 20190218日记
  • Cisco路由器上配置DHCP全程详解
  • App的登录注册相关接口
  • LINQ : 在LINQ TO SQL中关闭ObjectTrackingEnabled提高性能
  • pat乙级 1031-1035
  • ISA的学习体会一:ISA设置的指导思想
  • luogu P4848 崂山白花蛇草水
  • idou老师教你学Istio 26:如何使用Grafana进行可视化监控
  • RHEL4- WEB服务(十一)apache服务器日志的压缩、回滚
  • 你的知识,价值几何?
  • os.path.dirname使用方法
  • 【React系列】如何构建React应用程序
  • 【知识碎片】第三方登录弹窗效果
  • LeetCode算法系列_0891_子序列宽度之和
  • node入门
  • Terraform入门 - 1. 安装Terraform
  • ubuntu 下nginx安装 并支持https协议
  • 百度地图API标注+时间轴组件
  • 翻译--Thinking in React
  • 浮动相关
  • 后端_ThinkPHP5
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 力扣(LeetCode)22
  • 新书推荐|Windows黑客编程技术详解
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 异常机制详解
  • 智能合约Solidity教程-事件和日志(一)
  • 中文输入法与React文本输入框的问题与解决方案
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 阿里云重庆大学大数据训练营落地分享
  • 正则表达式-基础知识Review
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #pragam once 和 #ifndef 预编译头
  • #pragma multi_compile #pragma shader_feature
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (10)ATF MMU转换表
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)计算机毕业设计高校学生选课系统
  • (一)UDP基本编程步骤
  • (转)Linux下编译安装log4cxx
  • (转)Sublime Text3配置Lua运行环境
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转载)OpenStack Hacker养成指南
  • .net FrameWork简介,数组,枚举
  • .NET 设计一套高性能的弱事件机制
  • .net 验证控件和javaScript的冲突问题
  • ::before和::after 常见的用法
  • @RestController注解的使用
  • @synthesize和@dynamic分别有什么作用?
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell