Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day28】—— 数据库5
【摘要】
大家好,我是陈哈哈,北漂五年。相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一...
大家好,我是陈哈哈,北漂五年。相信大家和我一样,
都有一个大厂梦
,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题
的形式,带你过一遍热门面试题及恰如其分的解答。
一路走来,随着问题加深,发现不会的也愈来愈多。但底气着实足了不少,相信不少朋友和我一样,日积月累才是最有效的学习方式!想起高三时一个同学的座右铭:只有沉下去,才能浮上来。
共勉(juan)。
烟花台风来之前的上海
,江浙沪各地的老铁们,保重!
作者:對你何止一句钟意
车票
本栏目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的指针,需要到磁盘数据页中取。
非聚集索引
的数据存储在一个位置,索引存储在另一位置。由于数据和非聚集索引是分开存储的,因此在一个表中可以有多个非聚集索引。
聚集索引 和 非聚集索引的区别:
- 单表中只能有一个聚集索引,而非聚集索引单表可以存在多个。
- 聚集索引,索引中键值的
逻辑顺序
决定了表中相应行的物理顺序
;非聚集索引,索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同
。 - 索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的
叶节点就是数据节点
文章来源: chensj.blog.csdn.net,作者:_陈哈哈,版权归原作者所有,如需转载,请联系作者。
原文链接:chensj.blog.csdn.net/article/details/119112228
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)