MySQL第45课~基础学完了,面试题你都会了吗?1索引部分

所有内容收录在合集~MySQL入门到熟练。欢迎点赞关注我哦~

前面的都是一些基础,面试的时候会惊恐的发现,什么鬼啊,好多题我都不会,接下来主要写一些面试题。

面试的时候,关于MySQL主要有5大部分

索引部分,内部技术架构,事务,日志和开发。

关于索引的面试题

MySQL如何实现索引机制?

三种方式:B+树索引,Hash索引,全文索引。

InnoDB索引与MyISAM索引实现的相同点是什么?区别是什么?

解析:MyISAM索引文件和数据文件是分离的,用B+树进行实现,主键索引和辅助索引实现一致,索引文件仅保存记录所在页的指针(物理位置),通过这些地址来读取页,进而读取被索引的行。

InnoDB索引存储时,和数据放在同一个文件里,数据放在文件里,索引直接在文件里面追加。索引的B+树,最下面,叶子节点存储的具体会指向的数据,InnoDB指向的是id,MyISAM指向的是指针,

答案:共同点:都用的B+树

区别:InnoDB的辅助索引data域存储相应记录的主键的值而不是地址。

InnoDB的数据文件本身就是主索引文件

MyISAM的索引和数据是分开存储的

一个表中如果没有创建索引,还会创建B+树吗?

都会创建。

如果有主键,就会创建聚簇索引,B+树就生成了。

没有主键,也会创建,比如聚簇索引,生成隐式的rowid,和主键一样,不会和其他行重复,合理存储数据,每个数据指定落地的位置,相当于有一个不是主键,但功能类似主键的存在。只供MySQL内部使用。

B+树的相关(索引的实现原理数据结构)

一个页有16k大小,每个页都是。

B树在每个页中既要他的主键/索引的值,又要存储具体这行的数据,还要把数据存储在每个页中。B+树只存储主键/索引的值,没有具体的数据,而是在最页里面存储了一行当中其他的值。

认识一下页

record_type 表示记录的类型,0是普通记录,2是最小记录,3是最大记录,1是B+树非叶子节点记录。

再认识一下B+树

每个叶的最大值和最小值,对应的是下一个页的地址,同时也记录了上一个叶的地址。一般在磁盘上是物理连接的。基础的优化可以放置到独立的磁盘上。

next_record,表示下一条记录的相应位置,用箭头表示下一条记录。


聚簇索引和非聚簇索引的B+树有什么区别?

解析:主键作为索引的值就是聚簇索引,只有一个。

索引和数据在同一个B+树中,页内的记录是按照主键的大小顺序排成一个单向链表,页和业之间也会根据页中记录的主键大小顺序排成一个双向链表,非叶子节点存储的是记录的主键+页号,叶子节点存储的是完整的用户记录。(一页存满了进入下一页)

优点:速度快,对于主键的排序和范围查找非常快,节省IO操作。

缺点:插入的时候严重依赖顺序,更新主键代价高。

限制:inno支持,MyISAM不支持。

由于数据的物理存储方式只有一种,所以每个MySQL只有一个聚簇索引。

如果没有定义主键,会选择非空的唯一主键代替,最好设计时,有自增的,不重复的id,不使用无序的,如gkitggkh,字符串做主键

其他的不论是二级索引,联合索引,复合索引都是非聚簇索引

比如按名字查找等。

非聚簇索引查找的值需要在到底之后,只能得到一个id,再去聚簇索引,通过主键id拿出具体数据,

聚簇索引定位后,包含的一列的值可以直接读出来

页内记录按照某列排序成单向链表,页和页之间也是页中记录的某列,大小顺序排成双向链表。非叶子节点存储的是x列+页号,叶子节点存储的不是完整的用户记录,而是X列+主键的两个列的值

答案:

聚簇索引每页是按照主键排序的,非聚簇索引是按引哪一列为索引列排序的,也就是按照自己的内容创建了一个属于自己的B+树。

页内记录按照某列排序成单向链表,页和页之间也是页中记录的某列,大小顺序排成双向链表。非叶子节点存储的是x列+页号,叶子节点存储的不是完整的用户记录,而是X列+主键的两个列的值

说一下B+树中的聚簇索引的查找(匹配)逻辑

假设id为999

从根节点做匹配,匹配的就是主键,那么主键999和当前根节点包含的2个主键进行匹配,存储的数据量越多,树的结构也就越矮。之后不断进行匹配,得出结果。

(假设只有一个id,那就是存粹的平衡二叉树,数据量变大就会非常高,降低高度的话,在页中存储更多的数据。变矮可以减少自旋。)

说一下B+树中的非聚簇索引的查找(匹配)逻辑

由于查找方式不同,可能会在很多行中。比如性别,年龄等。

可以通过增加约束进行查找,或者通过文本创建索引。或者联合索引等吗,转换为ASCII码,或具体的数字进行比对。联合索引遵循最左匹配原则,同时注意like可能会出现的匹配场景和影响。

平衡二叉树,红黑树,B树和B+树的区别是什么,都有哪些应用场景?

二叉树分平衡二叉树和普通二叉树

这个时候需要平衡二叉树,AVL树,可以保证查询效率较高。

特点:

是一棵空树,或者左右两个子树的高度差绝对值不超过1

左右两个子树都是一颗平衡二叉树

缺点:节点只能存一份数据,树会变高,发生自旋的操作,导致只适合存储少量数据

应用广泛一些,两次旋转就可以达到平衡。旋转区域小



一个B+树中能存放多少条索引记录?

假设3层,从根节点来看,可以存16k,主键+指针,可以有16k个叶子节点,再下一层,每个叶子节点,也可以存16k,在第三层,假设一行占1k,也有16行,那就是16X16000X16000

使用B+树存储的索引的crud的执行效率如何?

C CREATE 添加

一般在树的末尾增加一条记录,三层基本没影响,数据量很大,4层可能自旋

R READ 读取

U UPDATE 如果不改id,一般不会数据移动

D DELETE 有可能会移动

O(lognN),以2为底数,N树的高度

什么是自适应哈希索引?

MySQL内部提供的一套额外的索引机制,没办法手动干预创建

什么是2-3树2-3-4树?

多叉树的一种,

2-3树具有如下特点:

2-3树的所有叶子节点都在同一层,

有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点

有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点

2-3,树是中二节点和三节点构成的树

展开阅读全文

页面更新:2024-03-04

标签:子树   索引   节点   指针   顺序   叶子   大小   两个   文件   基础   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top