MySQL自增主键为何不是连续的呢?

休闲2025-11-05 07:48:408356

大家好,自增主我是连续小龙。之前阿里二面问过我这样一个问题:

面试官:"MySQL主键你一般怎样用?自增主"

心想:"嘿嘿,面试官肯定想问InnoDB引擎索引特性相关知识!“

小龙:”平时主键我一般用自增主键!因为自增ID有序,连续会按顺序往最后插入,自增主而UUID无序,连续随机生成,自增主随机插入,连续会造成频繁页分裂,自增主内存碎片化,连续大量随机IO,自增主巴拉巴拉。连续。自增主。连续。自增主“

心想:“这波稳啦!“

然后,面试官又来一套组合拳

面试官:”en!好,那你知道自增主键是否严格递增呢?“

心想:”这还不简单,肯定递增啊!不对,仔细一想,有一些情况下自增主键是断开的,于是服务器托管

小龙:“‘肯定不是递增的啊!"

以为到这里结束啦,只是考考我是否实际真正用过,没想到还是天真啦!

面试官:”那你知道为啥不是严格递增的吗?换句话来说,为何不是连续的?“

小龙:”裂开!tm还真不知道,不会真要考那么底层吧!我去“

于是骂骂咧咧结束了这个话题!

但是由于其他问题回答的也可以,还是过啦!

不过,既然遇到啦这个问题,下来查阅了资料,还是想分享给大家!

1、前文

众所周知,由于自增主键可以让主键索引尽量地保持递增顺序插入,免费源码下载避免了页分裂,大量的随机IO。自增主键不连续。

这是大家已经熟知的知识点,但是,可能也有大部分朋友和之前的小龙一样不知道为何自增主键不是严格递增的?

今天这篇文章,我们就来说说这个问题,看看什么情况下自增主键会出现 “断层”?

为了更加形象,这里创建一个表xl_tb,其中id是自增主键字段、a是唯一索引,然后插入一条数据,我们再查看它的表结构。

CREATE TABLE `NewTable` ( `id`  int(11) NOT NULL AUTO_INCREMENT , `a`  int(11) NULL , `b`  int(11) NULL , PRIMARY KEY (`id`), UNIQUE INDEX `a` (`a`) USING BTREE  );  insert into xl_tb values(null, 1, 1)  mysql> show create table xl_tb\G; 
本文地址:http://www.bhae.cn/html/143a29099566.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

三星台式电脑装机教程(简单易懂的三星台式电脑装机教程,助你快速搭建个人工作站)

编写快速安全Bash脚本的建议

亿级流量网站架构核心技术:限流详解之节流

Spring Boot 之 RESRful API 权限控制

电脑开机报Windows错误的解决方法(应对电脑开机报Windows错误,避免系统崩溃)

Markdown/reST 文档DevOps流水线

人工智能与VR结合:带来体验多样性

数学菜鸟的AI学习攻略:数学符号轻松入门

友情链接

滇ICP备2023000592号-9