Mysql索引面试常见问题

1、索引的基本概念

1)什么是索引
索引就是排好序的数据结构,使用的数据结构是B+Tree
2)常见的索引实现方式有哪几种
一般索引的实现方式有Hash、B+Tree(最常用)
3)索引的实现级别是表级别还是数据库级
表级,在创建表时,可以设置索引的类型

2、索引为什么使用B+Tree而不使用其他的数据结构

1)二叉树

  • 优点:一般情况下,查询的时间复杂度为log(n),这种情况下,查询效率较优(不考虑大数据量的情况)
  • 缺点:极端情况,单边插入,导致二叉树只有一个分支,查询时间复杂度为n
    在这里插入图片描述

2)红黑树

  • 优点:红黑树,也可以称为优化之后的平衡二叉树,虽然可以避免单个分支深度过大的情况
  • 缺点:但是当数据量过大时,由于红黑树的度为2,这样会导致深度过大。sql查询最耗时的是在执行IO时,如果深度过大频繁的进行IO,反而违背了我们使用索引的初衷

3)BTree

  • 特点:每个节点中的数据大约15/16时会自动分裂,调整树的结构;叶节点就要有相同的深度,左子树跟右子树的深度相同 ;叶节点的指针为空(叶子节点不存储指针);节点中的数据key从左到右递增排列

  • 优点:弥补了在大数据量的情况下深度过大的情况,相同的数据量只需要更少的层,相同深度的树可以存储更多的数据

  • 缺点:不适合范围查询,范围查询每次仍然需要重新从根节点重新开始查询

4)B+Tree

  • 特点:非叶子节点不存储data,只存储key,可以增加度(一般会超过100,因此h一般在3~5之间。在从硬盘中向内存中读取数据时,一般都是以页为单位,一页的大小为4kb,因此B+Tree的度一般为4kb/单个节点的大小,并且B+Tree的非叶子节点只存储Key值,这样在一页中可以存储更多的key,一般情况下B+Tree的度都会超过100);叶子节点不存储指针;顺序方位指针,提高区间访问的性能
  • 优点:由于叶子节点中有指向下个节点的指针,因此在进行范围查询的时候效率较高

3、聚集索引和非聚集索引有什么区别

1)MyISAM索引实现(非聚集)如下图所示:
在这里插入图片描述
特点:

  • 主键索引和非主键索引的查询方式都是一样的,因此在查找的时候首先通过聚集索引找到对应的指针,然后在从数据表中找到对应的数据 ;
  • 索引文件和数据文件是分离的(存储的时候有三个文件)

2)innodb索引实现(使用的最多)聚集索引
在这里插入图片描述
特点:

  • 索引和数据放在一起叫做聚集索引 存储的文件只有两个
  • 主键索引和非主键索引存储结构不相同

4、innodb的为什么必须要有主键

  • innodb中数据格式就是按照主键去组织的,如果在没有维护主键,那默认的主键是ID innodb推荐的主键是自增的主键

5、 使用uuid当做主键缺点:

  • 比较占内存
  • 比较效率较低
  • 使用uuid只能把数据插入到后面

根据加载的原则,会将当前页的数据load到内存中 数据文件本身就是索引文件 表数据文件本身就是按照B+tree组织的一个索引文件 聚集索引-叶子节点包含了完整的数据记录

为什么InnoDB表必须有主键,并且推荐使用整形的自增主键 为什么非主键索引结构叶子节点存储的是主键值(一致性和节省存储空间) 关键点: 主键索引中的叶子节点,存储的是整行的数据 非主键索引(辅助索引)中存储的是主键值

6、联合索引的底层数据结构长什么样

当前的索引有三个字段,emp_no,title,from_data
在这里插入图片描述
那么在数据库中的结构就是如下所示,在进行比教时,是一次以此进行比较,比如如果插入数据为10003, 此时先与100
202进行比较,然后再用第二个字段与Saff字段比较,以此往后进行……
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值