Java大厂面试百日冲刺 - 日积月累,每日三题【Day28】—— 数据库5

网友投稿 529 2022-05-28

大家好,我是陈哈哈,北漂五年。相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍热门面试题及恰如其分的解答。

一路走来,随着问题加深,发现不会的也愈来愈多。但底气着实足了不少,相信不少朋友和我一样,日积月累才是最有效的学习方式!想起高三时一个同学的座右铭:只有沉下去,才能浮上来。共勉(juan)。

烟花台风来之前的上海,江浙沪各地的老铁们,保重!

车票

面试题1:说一下你对聚集索引与非聚集索引的理解,以及他们的区别?

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day28】—— 数据库5

追问1:为什么聚集索引可以创建在任何一列上,如果此表没有主键约束,即有可能存在重复行数据呢?

追问2:聚集索引一定比非聚集索引性能优么?

面试题2:说一说你对 B树 和 B+树 的理解吧

面试题3:说一下你对最左前缀原则的理解吧

每日小结

本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。

面试题1:说一下你对聚集索引与非聚集索引的理解,以及他们的区别?

首先解释一下,什么是聚集索引和非聚集索引。这里我想起网上看到的一个典型的例子:

说索引像一个汉语字典,聚集索引是根据拼音查询,而非聚集索引是根据偏旁部首查询,你想想哪个查的快?

汉语字典的正文本身就是一个聚集索引。比如,我们要查“啊”字,拼音是“a”,按照拼音排序是以“a”开头“z”结尾的,那么“啊”字就自然地排在字典的前部。如果翻完了所有以“a”开头的内容仍然找不到这个字,那么就说明字典中就没有这个字。我们知道,其实字典的正文部分本身就是一个目录,不需要再去查其他目录来找到我们需要找的内容。我们把这种正文内容本身就按照一定规则排列(有序)的目录称为“聚集索引”。

问题来了,遇到不认识的字,不知道它的发音,怎么办?

这时候,就得用“偏旁部首”查了吧,然后根据这个偏旁后的页码来找字。这种结合“部首目录”和“检字表”查到的字的排序并不是真正的正文的排序方法,比如查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。

我们可以通过这种方式来找到我们所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到相应页码。我们把这种目录纯粹是目录,正文纯粹是正文的排序方式(无序)称为“非聚集索引”。

1、聚集索引

聚集索引是我们常用的一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序,我们叶子结点直接对应的实际数据,当索引值唯一(unique)时,使用聚集索引查找特定的行效率很高。例如,使用唯一店员 ID 列 emp_id 查找特定雇员的最快速的方法,是在 emp_id 列上创建聚集索引或 PRIMARY KEY 约束。可见,自增主键就是一个标准的聚集索引。

当某列满足两个条件时,我们可以创建聚集索引:

数据存储有序(如自增)

key值应当唯一

聚簇索引像字典,字典按字母顺序排列数据,有序。在聚集索引中,索引包含指向数据存储的块而不是数据存储地址的指针,和非聚集索引(Normal)相反。

2、非聚集索引

非聚集索引就是索引类型为Normal的普通索引啦,我们在《聊聊MySQL索引“B+Tree”的前世今生》这篇文章中提到,B+Tree(这里是索引类型是Normal)所有关键字存储在叶子节点,但不存储真正的data,叶子结点存的是一个指向磁盘data的指针,需要到磁盘数据页中取。

非聚集索引的数据存储在一个位置,索引存储在另一位置。由于数据和非聚集索引是分开存储的,因此在一个表中可以有多个非聚集索引。

聚集索引 和 非聚集索引的区别:

单表中只能有一个聚集索引,而非聚集索引单表可以存在多个。

聚集索引,索引中键值的逻辑顺序决定了表中相应行的物理顺序;非聚集索引,索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。

索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点

Java 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Redis持久化之RDB/AOF
下一篇:ROS_Kinetic_07 ROS中机器人三维物理引擎高保真仿真利器gazebo 7.0
相关文章