MySQL面试:为什么用自增列作为主键
1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引。
如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引。
如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。
2、数据记录本身被存于主索引(一颗B+Tree)的叶子节点上,这就要求同一个叶子节点内(大小为一个内存页或磁盘页16K)的各条数据记录按主键顺序存放
因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点)
3、如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页
4、如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置
此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉(上一次和这一次插入的页不是一个页,大量的磁盘随机 IO),此时又要从磁盘上读回来,这增加了很多开销
同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面。
MySQL面试:为什么用自增列作为主键相关推荐
- 为什么一般用自增列作为主键?
为什么一般用自增列作为主键? 为什么一般用自增列作为主键? 如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页 如果使用非自增主键( ...
- mysql复合主键长度_Mysql 多列形成主键(复合主键 )
什么是数据表的复合主键 所谓的复合主键 就是指你表的主键含有一个以上的字段组成 比如 create table test ( name varchar(19), id number, value va ...
- ms sql 带自增列 带外键约束 数据导入导出
1,生成建表脚本 选中要导的表,点右键-编写表脚本为-create到 ,生成建表脚本 2,建表(在新库),但不建外键关系 不要选中生成外键的那部分代码,只选择建表的代码 3,导数据,用SQL STU ...
- mysql删除表里所有自增行,主键重新开始递增的方法
ALTER TABLE customer_inf AUTO_INCREMENT =0;
- mysql 自增列 类型_MySQL--自增列学习
##=====================================================================================## 在数据库表设计中会纠 ...
- MySQL--自增列学习
##=====================================================================================## 在数据库表设计中会纠 ...
- MySQL 使用自增ID主键和UUID 作为主键的优劣比較具体过程(从百万到千万表记录測试)...
測试缘由 一个开发同事做了一个框架.里面主键是uuid.我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿 ...
- MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)...
Reference: https://blog.csdn.net/mchdba/article/details/52336203 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不 ...
- mysql读取自增值失败_MySQL添加自增列失败
想往一个mysql表里添加一个自增列做主键,居然失败报告无法读取,这是怎么回事? 1.问题描述 有位朋友在升级discuz论坛数据库时遇到问题了,想给一个表添加自增列做主键,结果发生下面的报错: my ...
最新文章
- crm开源系统 tp框架_thinkphp6学习教程与源码 tp6开源CMS系统源码研究
- MySQL数据库中默认事务隔离级别是?
- GATB的使用小例子test.cpp
- 独家 | 使用TensorFlow 2创建自定义损失函数
- 【 MATLAB 】Fourier Transforms ( fft )
- linux c 内存泄露 检查工具
- java IO之 File类+字节流 (输入输出 缓冲流 异常处理)
- 数字图像处理:附录-程序实例、参考文献、标准图片集合
- sql语句的学习(2)
- mysql增量备份具体步骤_记一次mysql全量备份、增量备份的学习过程
- Web Service视频分享
- c++多线程在异常环境下的等待
- Android 编程下 ListView 和 CheckBox 混合使用时的常见问题
- 几个特别棒的免费可商用字体
- php中的fpm_基于php-fpm的配置详解
- creo三维生成二维图_proe5.0三维图转二维图
- Recovering Realistic Texture in Image Super-resolution by Deep Spatial Feature Transform
- H.264 AVCC header
- TCP/IP可能有你不知道的事
- 【NLP】第8章 将 Transformer 应用于法律和财务文件以进行 AI 文本摘要
热门文章
- 长春哪个学校可以学习计算机编程的,长春编程学习,长春学编程的学校,长春学编程自学好还是报班好 - IT教育频道...
- 4个基本不等式的公式高中_不等式链(高中4个基本不等式链推导)
- ChatGPT 拓展资料:Telegram Bot 打造专属聊天机器人
- CRS-4544: Unable to connect to OHAS has启动失败
- oracle查找当前日期的三个工作日前那天日期,采用函数方式
- 全球工业半导体市场占有率十大排名出炉
- 新启动计算机顺序,最新版本:计算机启动启动项设置
- js判断数据是否为空值的方法
- Android Studio Win7安装
- 2.1、用JsonParser解析json树模型