栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL面试题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL面试题

为什么建议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 列的存在的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031722.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号