【大厂面试官】一条SQL,我怎么知道它有没使用到索引?

  • 面试官:知道索引有什么类型吗?
  • 面试官:B树索引说一下?
  • 面试官:你刚刚说值都存储在叶子节点,那有什么好处?
  • 面试官:知道为什么主流数据库引擎不采用哈希索引吗?
  • 面试官:聚簇索引和二级索引有什么关联?
  • 面试官:那我一条SQL,我怎么知道它有没使用到索引?
  • 面试官:有没索引失效的情况呢?
  • 👉以贴近现实的【面试官面试】形式帮助你系统学习后端技术
  • 📚本期是《MySQL系列》,其他系列博客请订阅专栏《后端训练营》
  • ❤创作不易,不妨点赞、收藏、关注支持一下

alt

文章目录

  1. 索引类型
    1. B-Tree索引
    2. B-Tree值的存储
    3. 哈希索引
  2. 聚簇索引
  3. 索引效率
    1. 索引失效情况

1. 索引类型

面试官:知道索引有什么类型吗?

知道的,我了解的主要有B树索引、哈希索引。


面试官思考中…


1.1 B-Tree索引

面试官:B树索引说一下?

好的面试官。

  1. 结构方面,B-Tree不同于二叉搜索树,它是多子树的
  2. 值的存储方面,所有的值都存储在叶子节点,且叶子节点可以存储多个值
  3. 另外叶子节点之间用指针链接形成双向链表。如果是二级索引建立的B-Tree,每个叶子节点的值有保存对应行数据的主键

alt


面试官思考中…


1.2 B-Tree值的存储

面试官:你刚刚说值都存储在叶子节点,那有什么好处?

嗯有两方面。

值都存储在叶子节点,使得非叶子节点层数更少,整棵B-Tree的高度变得矮胖,可以提高搜索的效率

另外业务上一般都是范围查询,值都存储叶子节点同时形成双向链表,很适合范围查询。


面试官思考中…


1.3 哈希索引

面试官:知道为什么主流数据库引擎不采用哈希索引吗?

hhh就像我刚刚说的,业务上一般都是范围查询,而哈希索引不支持任何范围查询。

哈希索引会为所有的索引列计算一个哈希码,在哈希表中保存哈希码和指向每个数据行的指针,这种结构对精确匹配查询效率才高。


面试官思考中…


2. 聚簇索引

面试官:聚簇索引和二级索引有什么关联?

好的面试官。

是这样的,二级索引指的是非主键索引,它的叶子节点保存的只是行的主键值,所以需要通过主键来找到行数据。

而聚簇索引是通过主键来建树,叶子节点包含了行的全部数据,主键索引就是聚簇索引。

所以通过二级索引查找行,需要先在二级索引建立的B-Tree上找到主键值,再从聚簇索引建立的B-Tree找到行数据。


面试官思考中…


3. 索引效率

面试官:那我一条SQL,我怎么知道它有没使用到索引?

可以使用Explain关键字来分析,它会模拟执行sql语句,查询出sql语句执行的相关信息,如哪些索引可以被命中、哪些索引实际被命中。

我说下Explain查询结果的几个关键字段。

  • type

    • cost:通过索引一次查询
    • ref:使用到索引
    • range: 使用到索引
    • all:全表扫描
  • Extra

    • using filesort:使用外部文件排序,发生在无法使用索引的情况下

    • using index:where查询的列索引覆盖,直接通过索引就可以查询到数据

    • using where:where查询的列,没有全部被索引覆盖

    • using join buffer:使用了连接缓存

  • possible_key

    表示可以使用的索引

  • key

    表示实际使用的索引

3.1 索引失效情况

面试官:有没索引失效的情况呢?

有的,索引失效一般是这个SQL查询破坏了使用B-Tree查询的条件。

  • 对索引列进行数学函数处理的话,索引会失效

  • 索引是字符串类型,查询值没有添加单引号''那索引会失效。因为值类型与索引列类型不一致,MySQL不会使用索引,而是把索引列数据进行类型转换后进行查询

  • 对索引列进行模糊查询,%要放在最右侧,否则索引失效

    SELECT * FROM user WHERE name LIKE n%
    
  • 组合索引,前一个索引使用范围查询,后面的索引也会失效

大概是这些情况。

面试官抓抓脑袋,继续看你的简历......


得想想考点你不懂的😰

未完待续。。。

好了,今天的分享就先到这,我们下期《MySQL系列》继续。

📚以贴近现实的【面试官面试】形式帮助你学习系统后端技术,其他系列博客请订阅专栏《后端训练营》


创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

#大厂##大厂面试##MySQL##MySQL面试##Java#
Java Offer训练营 文章被收录于专栏

👉以贴近现实的【面试官面试】形式帮助你系统学习后端技术 👉成体系知识帮你在后端进阶,每一道问答助你怒怼大厂面试官,收获大厂offer 👉《后端训练营》包含Redis系列、MySQL系列、Kafka系列、ZooKeeper系列、JVM系列、多线程系列等等 👉制作不易,各位的支持是我创作的最大动力

全部评论
666
点赞 回复
分享
发布于 04-16 21:04 广东
支持支持
点赞 回复
分享
发布于 04-25 23:38 广东
滴滴
校招火热招聘中
官网直投

相关推荐

头像
04-11 16:00
已编辑
门头沟学院 生态学类
xdm 希望大家给我点意见和建议。我把自己70来场所有的面试实录整理了一下,有字节、阿里、腾讯、快手、美团、滴滴、华为、京东、百度、蔚来等等等一众互联网大厂的面试实录。其中光阿里就有10场+。整理出来的资料主要分为两个方面,一个是自己的实习经历部分,其实也就是实习中做的事,也就是项目相关的。另一个就是八股文方面。主要分为以下四个部分。第一部分,这些面经都是围绕我的几版简历,我会把面试中经常问的几个板块,比如项目描述、实习经历、专业技能等贴出来,供大家参考。第二部分,实习经历方面,当然不是让大家来抄袭造假用着跟我一样的实习,我把我实习中做的事情抽象成一种通用的场景,就是你学习之后你也可以说你在某某公司的这个部门,做过这么一件类似具体这样的事情。我会先有一篇讲解文章,把我实习所做的事等等很详细的跟大家列出来,并且把面试中最爱被问的问题罗列出来并做标准的回答。看完之后有了基本的认知,然后再配合面经里面的一直被面试官问的那些问题 这样就你也可以把这个场景case增加到自己的简历里。我承认并不是什么高并发、高流量,实习嘛,毕竟很难接触到。但是比较真实吧。第三方面,面经纬度八股文方面,面经动辄就是一篇四五十分钟,如果不知道录音里问的是什么直接去听就像开盲盒一样。所以我把和面试官聊的问题全部都整理成文字版,然后可以根据文字版的问题决定要不要去听这个录音。我觉得我的面试水平、面试回答的内容也算是比较硬盒吧毕竟这些东西 我面的太多了。太了解面试了听过我面经的同学应该知道 能否学到东西最终呈现就是一篇文字面经对应底下这场面试的录音。我也会做声音处理,不过不影响听。第四方面,技术专题维度方面。一份面经里的问题是比较杂的。我会把所有面经中的问题 按照技术栈比较数据库、redis、场景题等全部划分出来。也可以有针对性的去学。不要上来就说割韭菜、麦克这种话。如果你有优质的资源你也可以做付费和分享,我希望自己做的东西是有价值的,有意义的。也希望做到很好。我敢说你用这套资料学、在这收获的价值可以匹配的上你的付出。所以不知道大家怎么看 以及有什么更好的建议吗。update 面经资料已经准备差不多了,感兴趣的xd可以给我发私信先了解一下~给大家截两张图,类似底下这种~ #实习,投递多份简历没人回复怎么办#  
点赞 评论 收藏
转发
2 6 评论
分享
牛客网
牛客企业服务