一、面试官考点之索引是什么?

  • 索引是一种能提高数据库查询效率的数据结构。它可以比作一本字典的目录,可以帮你快速找到对应的记录。
  • 索引一般存储在磁盘的文件中,它是占用物理空间的。
  • 正所谓水能载舟,也能覆舟。适当的索引能提高查询效率,过多的索引会影响数据库表的插入和更新功能。

二、索引有哪些类型类型

数据结构维度

  • B+树索引:所有数据存储在叶子节点,复杂度为O(logn),适合范围查询。
  • 哈希索引: 适合等值查询,检索效率高,一次到位。
  • 全文索引:MyISAM和InnoDB中都支持使用全文索引,一般在文本类型char,text,varchar类型上创建。
  • R-Tree索引: 用来对GIS数据类型创建SPATIAL索引

物理存储维度

  • 聚集索引:聚集索引就是以主键创建的索引,在叶子节点存储的是表中的数据。
  • 非聚集索引:非聚集索引就是以非主键创建的索引,在叶子节点存储的是主键和索引列。

逻辑维度

  • 主键索引:一种特殊的唯一索引,不允许有空值。
  • 普通索引:MySQL中基本索引类型,允许空值和重复值。
  • 联合索引:多个字段创建的索引,使用时遵循最左前缀原则。
  • 唯一索引:索引列中的值必须是唯一的,但是允许为空值。
  • 空间索引:MySQL5.7之后支持空间索引,在空间索引这方面遵循OpenGIS几何数据模型规则。

三、面试官考点之为什么选择B+树作为索引结构

可以从这几个维度去看这个问题,查询是否够快,效率是否稳定,存储数据多少,以及查找磁盘次数等等。为什么不是哈希结构?为什么不是二叉树,为什么不是平衡二叉树,为什么不是B树,而偏偏是B+树呢?

我们写业务SQL查询时,大多数情况下,都是范围查询的,如下SQL

select * from employee where age between 18 and 28;

为什么不使用哈希结构?

我们知道哈希结构,类似k-v结构,也就是,key和value是一对一关系。它用于等值查询还可以,但是范围查询它是无能为力的哦。

为什么不使用二叉树呢?

先回忆下二叉树相关知识啦~ 所谓二叉树,特点如下:

  • 每个结点最多两个子树,分别称为左子树和右子树。
  • 左子节点的值小于当前节点的值,当前节点值小于右子节点值
  • 顶端的节点称为根节点,没有子节点的节点值称为叶子节点。

我们脑海中,很容易就浮现出这种二叉树结构图:

但是呢,有些特殊二叉树,它可能这样的哦:

如果二叉树特殊化为一个链表,相当于全表扫描。那么还要索引干嘛呀?因此,一般二叉树不适合作为索引结构。

为什么不使用平衡二叉树呢?

平衡二叉树特点:它也是一颗二叉查找树,任何节点的两个子树高度最大差为1。所以就不会出现特殊化一个链表的情况啦。

但是呢:

  • 平衡二叉树插入或者更新是,需要左旋右旋维持平衡,维护代价大
  • 如果数量多的话,树的高度会很高。因为数据是存在磁盘的,以它作为索引结构,每次从磁盘读取一个节点,操作IO的次数就多啦。

为什么不使用B树呢?

数据量大的话,平衡二叉树的高度会很高,会增加IO嘛。那为什么不选择同样数据量,高度更矮的B树呢?

B树相对于平衡二叉树,就可以存储更多的数据,高度更低。但是最后为甚选择B+树呢?因为B+树是B树的升级版:

  • B+树非叶子节点上是不存储数据的,仅存储键值,而B树节点中不仅存储键值,也会存储数据。innodb中页的默认大小是16KB,如果不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点树)就会更大,树就会更矮更胖,如此一来我们查找数据进行磁盘的IO次数有会再次减少,数据查询的效率也会更快。
  • B+树索引的所有数据均存储在叶子节点,而且数据是按照顺序排列的,链表连着的。那么B+树使得范围查找,排序查找,分组查找以及去重查找变得异常简单。

最后

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

想获取个人高清面试题的可以戳这里免费领取及个人也准备了很多面试题含答案的资料供你刷!

  • Java核心知识整理

Java核心知识

  • Spring全家桶(实战系列)

  • 其他电子书资料

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

[外链图片转存中…(img-qVBOJYus-1624952079814)]

java数组转换成字符串,附小技巧相关推荐

  1. char数组转换成字符串_将字符串转换为char数组java –将字符串转换为char

    char数组转换成字符串 Sometimes we have to convert String to the character array in java programs or convert ...

  2. java中 如何将一个字节数组转换成字符串

    String tmpStr="我的测试";  byte[] tb = tmpStr.getBytes();  String m=new String(tb);   System.o ...

  3. 【FastJson】使用FastJson将Json数组转换成字符串

    使用FastJson将Json数组转换成字符串 待处理的数据 代码实现 可以看出,Json数据像一个数组,里面的每一个元素都是一个对象,所以我们首先要定义出一个对象来存储数据 public class ...

  4. php数组转字符串 join,jQuery中将数组转换成字符串join()和push()使用

    1.push()将元素依次添加至数组: 2.join()将数组转换成字符串,里面可以带参数分隔符,默认[,] $(document).on('click','.sure',function(){ va ...

  5. 【各种转换】数组转换成字符串,集合转换成字符串,字符串转集合

    由于在工作中经常用到各种类型的互相转换,这里总结一下: 1. 基本类型转字符串: 2. 将list集合转化成string数组:用toArray 3. String数组转集合 4. String数组转换 ...

  6. 怎样把php数组转换成字符串,php implode()

    实例代码 一维数组转换成字符串代码! <?php $arr1=array("shu","zhu","1″); $c=implode(" ...

  7. C#字节数组转换成字符串转

    C#字节数组转换成字符串 如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了.为了进行这样的转换,我们不得不借助另一个类:System.Text.Enc ...

  8. InputStream输入流转换成字节数组 和 字节数组转换成字符串

    https://blog.csdn.net/night_iv/article/details/7525760?utm_source=blogxgwz5 https://www.cnblogs.com/ ...

  9. Python中数组转换成字符串

    python中数组转换成字符串 数组转换成字符串可以使用下面这种方式将一个数组转换成字符串,其中arr是数组的数组名. ''.join(arr) 用上面这种方式需要确保数组里面的内容也是字符串的形式, ...

最新文章

  1. Java3大框架的学习都是什么
  2. POI处理Excel中的日期数据类型
  3. 云计算,拼的就是运维
  4. Career Essentials from Career Service
  5. npm eject 暴露webpack报错,less或sass添加报错
  6. JavaScript刷新页面,不重复提交
  7. 只需简单的整理,让你的Mac 更安全、更智能
  8. delphi linux arm_诺基亚N900搭载完整linux系统的小众智能手机
  9. 【Windows IoT】usb 票据打印机打印(未完成)
  10. ATMEGA328P引脚定义图
  11. 天猫旺铺装修的一些特殊代码 【持续收集中...】
  12. win7禁止应用程序联网
  13. 很哇塞的网页特效之字符串切换
  14. 买一包旺仔牛奶糖奖励自己
  15. 项目开发过程中遇到的问题和解决方法
  16. Ssd202 FUART 测试环境搭建
  17. python3爬虫实战(一)爬取创业邦创投库
  18. windows 搭建代理服务器 - Fiddler
  19. 蓝桥杯专题之并查集篇
  20. BIG5到GB的转换技术

热门文章

  1. C2872 “ACCESS_MASK”: 不明确的符号
  2. AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'connect'
  3. pytorch 检索数组
  4. torch.squeeze()和unsqueeze()
  5. python多维数组筛选
  6. OSPF-stub/totaly stub
  7. idea创建一个html5,idea创建一个SpringBoot项目
  8. 12c oracle 修改内存_Oracle12c中性能优化功能增强新特性之重大突破——内存列存储新特性...
  9. 增强包_机电工程学院开展“情暖冬日,爱在机电”冬至包饺子活动
  10. 计算机绘图实训,计算机绘图实训-杜兰萍主编.pdf