当前位置:网站首页>MySQL面试题
MySQL面试题
2022-07-30 23:19:00 【lanleihhh】
为什么建议InnoDB表必须建立主键?
InnoDB引擎创建的文件存储在idb文件中,使用聚簇索引来维护B+树保存数据
- 如果有主键,直接使用主键索引来组织整张表的数据
- 如果不建立主键,mysql会自动在列中找出一个没有重复数据的列建立唯一索引
- 找不到建立唯一索引的列,就会自动生成一个隐藏列建立唯一索引,来组织整张表
所以如果我们不手动建立主键索引的话,InnoDB最终还是会建立的,因此在创建表的时候就可以直接建立主键
为什么InnoDB推荐使用整型的自增主键?
使用整形作为主键:
- 比uuid更省空间,int4字节,UUID16字节
- 比uuid之间比较大小,快了很多
- 构建B+树索引时,避免页分裂,保证了索引的有序性
使用自增:
- 因为索引结构 b+ 树,具有有序的特点,如果主键不是⾃增的,在进行增删数据的时候,会判断数据应该存放的位置,进行插⼊和删除,为了保持平衡,会对数据页进行分裂等操作移动数据,严重影响性能,所以主键需要是自增的,插⼊时,插⼊在索引数据页最后。
B+树索引 与 Hash索引
Hash索引
- 对索引的key进行一次hash计算,定位出数据的存储位置
- hash索引定位数据更高效
- 但是只能满足“=”、“IN”,不支持范围查询、模糊查询、排序操作、最左前缀原则
而B+树支持范围查询
因为B+树的叶子节点存储的是索引和数据,每个叶子节点之间都有双向指针指向,适合范围查找
最左前缀原则的原理
多个字段建立组合索引时,查询时,必须出现组合索引中最左边的字段,否则这条语句不走索引。
为什么不符合最左前缀就不走索引?

组合索引也是用B+树来存储的,也是有序的
对a.b两个字段建立组合索引
a字段是排序的,而b字段相对于a的同一个记录中,b是排序的
a=1时,b=1,2 排序
a=2时,b=1,4 排序
a=3时,b=1,2 排序脱离了a字段,b就是1,2,1,4,1,2;不是排序的
因此,如果查询的时候,直接查询b字段,select * from table where b = ?,索引是有序的数据结构,这样查询,索引会失效,只有先查到a字段,才能查到a字段相同记录中b的排序情况
同理,对于(a, b, c)联合索引来说,查询 (a, b) 可以用到这个联合索引,但是查询 (b, c) 就没办法使用这个联合索引,因为 b 和 c 列的有序性都是依托于 a 列的存在的。
边栏推荐
- 360核心安全大脑3.0正式发布,构建政企用户的“能力中枢平台”
- IDEA usage skills
- image里的mode属性
- MySql统计函数COUNT详解
- A detailed explanation: SRv6 Policy model, calculation and drainage
- MySQL的一个问题
- 10 个关于自动化发布管理的好处
- leetcode 406. Queue Reconstruction by Height 根据身高重建队列(中等)
- HF2022-EzPHP reproduction
- Alibaba Cloud video on demand + project combat
猜你喜欢

mysql 中手动设置事务提交

【LeetCode】55. 跳跃游戏 - Go 语言题解
![[MySQL] Mysql transaction and authority management](/img/a5/c92e0404c6a970a62595bc7a3b68cd.gif)
[MySQL] Mysql transaction and authority management

Go语学习笔记 - gorm使用 - gorm处理错误 Web框架Gin(十)

flex-direction容器属性

Detailed operator

Compressing Deep Graph Neural Networks via Adversarial Knowledge Distillation

递增三元组

mysql中关于存储过程无法实现迁移复制表中数据问题

align-content、justify-content、align-items三个属性的作用和效果
随机推荐
leetcode(刷题篇13)
uniapp开发微信小程序-软考刷题小程序
MySql统计函数COUNT详解
CPM:A large-scale generative chinese pre-trained lanuage model
解决一个Mysql的utf8编码导致的问题
[0x800706D9] solution appears in Microsoft Store
flex-direction容器属性
Chevrolet Trailblazer, the first choice for safety and warmth for your family travel
Soft Exam Study Plan
uni-ui installation
第一节 zadig 入门
如何在 AWS 中应用 DevOps 方法?
grub learning
【LeetCode】42. 接雨水 - Go 语言题解
测试人面试 常被问到的计算机网络题,高薪回答模板来了
智能创意中的尺寸拓展模块
Achievements of Science and Technology (31)
Debezium error series 20: task failed to create new topic. Ensure that the task is authorized to create topics
Data cleaning - ingest using es
“蔚来杯“2022牛客暑期多校训练营4 L.Black Hole 垃圾计算几何