首页 > 其他分享 >索引常见面试题

索引常见面试题

时间:2023-09-13 22:45:58浏览次数:37  
标签:面试题 常见 存储 查询 索引 节点 where 主键

索引常见面试题

什么是索引?

索引是数据的目录,用来加快数据的搜索,类似书本的目录

可以分为几个类型

  • 数据结构
    • b+树索引,通过b+树存储索引,但是非叶子节点保存数据,叶子节点保存数据
    • hash索引:通过hash计算得出索引位置
    • fulltext索引:也叫全文索引(我不会介绍)
  • 物理存储
    • 聚簇索引:索引和数据存储在一起
    • 二级索引:只存储索引和主键
  • 字段类型
    • 主键索引:要求字段非空唯一,作为一个表的主键,mysql根据主键索引进行构建b+树,一张表只有一个主键索引
    • 唯一索引:要求字段有唯一性,但是允许空值
    • 普通索引:不要求唯一,不要要求字段是主键的索引
    • 前缀索引:只记录前n个字符的索引,节省空间
  • 字段个数
    • 单列索引:只有一个字段组成的索引
    • 联合索引:多个字段组成的索引

为什么 MySQL InnoDB 选择 B+tree 作为索引的数据结构?

因为b+树是多叉树,并且数据保存在叶子节点,查询的时候io次数不会过多,并且对范围查询友好。

hash索引不支持范围查询。

b树的非叶子节点需要存储数据,所以非叶子节点保存的数据量比b+树少,造成查询io次数多。

二叉树由于一个节点只能有两个叶子节点,导致树很高,查询的io次数多

什么时候需要 / 不需要创建索引?

使用索引的好处是提交查询速度

但是缺点是:需要维护索引,占用磁盘,降低增删改的速度

适合索引的场景:

  • 最好有唯一性限制
  • where经常用到的字段
  • 经常用于group by 或者order by的字段

不需要索引的场景:

  • 在where、groupby、orderby很少出现的字段
  • 重复度很高的字段,例如性别字段,因为优化器发现某个值经常出现的收,会忽略索引,使用全表更新
  • 数据少的时候
  • 经常更新的字段,例如余额字段,因为会频繁重建索引,影响性能

索引优化的方法

前缀索引优化

减少索引大小

覆盖索引优化

将where和orderby和groupby的字段组成联合索引,避免回表

主键索引最好自增,长度不要太大

因为如果主键无序会导致页分裂的发生,也就是如果有序的话直接在第二页插入就行。

但是如果无序,可能就要在别的页插入,也可能会移动其他页的数据,也可能造成大量内存碎片,导致索引结构不紧凑

长度太大导致每个页存储的数据量变少,会增加树的高度

索引最好是null

null影响优化器的判断,难以优化。

null是一个无意义的值但是仍然最少占用1kB的大小

防止索引失效

导致索引失效的情况:下一个问题

有什么情况导致索引失效

发生索引失效的情况:

  • 使用左模糊或者左右模糊匹配
  • 查询条件中对索引字段进行做了函数,类型转换,计算操作之后
  • 联合索引没有遵循最左匹配原则
  • where后面的or前后有一个不是索引字段

标签:面试题,常见,存储,查询,索引,节点,where,主键
From: https://www.cnblogs.com/xiuer211/p/17700988.html

相关文章

  • 索引失效有哪些
    索引失效有哪些使用左模糊或者左右模糊匹配因为索引时按照从第一个字符开始排序,也就是按照前缀排序,左模糊查询的时候,符合查询条件的前缀是无规律的,并不能使用索引。查询条件中对索引字段进行做了函数,类型转换,计算操作之后因为索引保存的是原始值,并不是操作之后的数值,但是......
  • 说一下索引覆盖,索引下推,回表
    说一下索引覆盖,索引下推,回表索引覆盖是指在查询过程中,查询的数据都能在二级索引的树中找到,不用根据主键查覆盖索引索引下推没有索引下推:执行器发送查询条件给存储引擎查找,存储引擎找到一条之后就返回给执行器,执行器判断当前记录是否符合条件,符合保留,不符合丢弃。重复过程,......
  • 大厂面试题:有了 G1 还需要其他垃圾回收器吗?
    Java全能学习+面试指南:https://javaxiaobear.cn今天我们主要来看下这两个高频的面试考题:G1 的回收原理是什么?为什么G1比传统GC回收性能好?为什么G1如此完美仍然会有ZGC?我们在上一篇中,简要的介绍了CMS垃圾回收器,下面我们简单回忆一下它的一个极端场景(而且是经常......
  • springcloud相关面试题
    (目录)springcloud相关面试题springcloud中网关起什么作用在SpringCloud中,网关起到了路由和过滤的作用。路由:网关通过配置路由规则,将请求转发到不同的服务实例上。它可以根据请求的URL、请求的HTTP方法、请求的Header等信息,将请求路由到相应的服务实例上。通过网关,可以实现......
  • Git常见的面试题
    在软件开发领域,Git是一个极为重要的版本控制系统,几乎每个开发者都需要掌握它。因此,在面试过程中,Git常常成为了面试官们用来考察候选人技能和经验的重要工具之一。以下是一些常见的Git面试题,希望它们能帮助你在面试中脱颖而出。什么是Git?Git是一个分布式版本控制系统,用于跟踪......
  • 匿名函数和常见是内置函数(配合匿名使用)和for循环的原理,异常的捕获
    匿名函数和常见是内置函数(配合匿名使用)和for循环的原理,异常的捕获匿名函数常见的内置函数(配合匿名函数使用)可迭代对象迭代器对象for循环内部原理异常捕获匿名函数匿名函数不需要显示地定义函数名,使用【lambda+参数+表达式】的方式lambda[arg1[,arg2,...argN]......
  • 匿名函数、常见的内置函数、可迭代对象、迭代器对象、for循环的内部原理、异常捕获
    匿名函数注意:匿名函数一般不单独使用匿名函数其实就是没有名字的函数关键字lambda#匿名函数也是必须加括号才能使用匿名函数的语法格式:lambda形参:返回值defindex(形参):返回值''''''''''''res=lambdax,y:x+yprint(res(1,2))!常见内......
  • HDFS的常见Shell操作
    HDFS的常见Shell操作直接在命令行中输入hdfsdfs,可以查看dfs后面可以跟的所有参数。详细使用方法请参考官方文档。注意:这里面的[]表示是可选项,<>表示是必填项[hadoop@hadoop81hadoop]$hdfsdfsUsage:hadoopfs[genericoptions] [-appendToFile<localsrc>...<dst>] [-cat......
  • 对标金九银十,分享32个模块的Android面试题,分分钟拿捏面试官
    前言2023年初伴随着疫情结束,迎来了“金三银四”。以为终于迎来胜利的“曙光”,不成想,现实却是当头一棒!!!从“金三银四”的“战绩”来看,程序员跳槽或者找工作并不理想,大批人迟迟找不到工作,大厂仍旧在进行几轮裁员,整个就业市场都不是太好!出现这种情况是因为中美贸易战,导致大环境不好、大......
  • Java实现常见查找算法
    Java实现常见查找算法查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。线性查找线性查找(LinearSearch)是一种简单的查找算法,用于在数据集中逐一比较每个元素,直到找到目标元素或搜索完整个数据集。它适用于任何类型......