当前位置:网站首页>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 列的存在的。
边栏推荐
- Apache Doris series: detailed steps for installation and deployment
- Go的Gin框架学习
- 软考学习计划
- 只会纯硬件,让我有点慌
- HashSet源码解析
- # # yyds dry goods inventory interview will brush TOP101: to determine whether there is a part of the list
- HF2022-EzPHP复现
- [SAM模板题] P3975 [TJOI2015] 弦论
- Achievements of Science and Technology (31)
- 递增三元组
猜你喜欢

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

二进制序列

image里的mode属性

Flex布局使用

测试人面试 常被问到的计算机网络题,高薪回答模板来了

#yyds干货盘点# 面试必刷TOP101:判断链表中是否有环

Compressing Deep Graph Neural Networks via Adversarial Knowledge Distillation

Abstract classes and interfaces (study notes)

电脑快捷方式图标变白解决方案

uniapp develops WeChat applet - soft exam brushing applet
随机推荐
Week 19 Progress (Understanding IoT Basics)
2022中国物流产业大会暨企业家高峰论坛在杭州举办!
[MySQL] DQL related operations
10 个关于自动化发布管理的好处
通过对抗性知识蒸馏压缩深度图神经网络
电脑快捷方式图标变白解决方案
The problem of sticky packets in tcp protocol transmission
【LeetCode】55. 跳跃游戏 - Go 语言题解
DFS题单以及模板汇总
Lambda表达式
#yyds干货盘点# 面试必刷TOP101:判断链表中是否有环
2021GDCPC广东省大学生程序设计竞赛 H.History
递增三元组
Debezium报错系列之二十:task failed to create new topic.Ensure that the task is authorized to create topics
Introducing the visualization tool Netron
2021GDCPC Guangdong University Student Programming Competition B.Byfibonacci
二叉查找树的定义,查找,插入,删除
uniapp折叠框二级循环
leetcode 406. Queue Reconstruction by Height 根据身高重建队列(中等)
360核心安全大脑3.0正式发布,构建政企用户的“能力中枢平台”