高频面试八股文原理篇(五)索引相关

news2024/12/23 14:51:26

目录

索引的优缺点

MySQL索引类型

索引原理

常见索引类型

MySQL数据库要⽤B+树存储索引⽽不⽤红⿊树、B树、 Hash的原因

怎么验证 MySQL 的索引是否满足需求

聚簇索引和非聚簇索引


索引的优缺点

索引的优点

  • 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
  • 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

索引的缺点

  • 时间方面:创建索引和维护索引要耗费时间,具体地,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率
  • 空间方面:索引需要占物理空间

MySQL索引类型

  • 从索引存储结构划分:B Tree索引、Hash索引、FULLTEXT全文索引、R Tree索引

  • 从应用层次划分:普通索引、唯一索引、主键索引、复合索引

  • 从索引键值类型划分:主键索引、辅助索引(二级索引)

  • 从数据存储和索引键值逻辑关系划分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)

索引原理

常见索引类型

  • hash B树 B+树
  • 具体来说 MySQL 中的索引,不同的数据引擎实现有所不同,但目前主流的数据库引擎的索引都是 B+ 树

hash:底层就是 Hash 表。进⾏查找时,根据 key 调⽤Hash 函数获得对应的 hashcode,根据 hashcode 找到对应的数据⾏地址,根据地址拿到对应的数据。

B树:B树是⼀种多路搜索树,n 路搜索树代表每个节点最多有 n 个⼦节点。每个节点存储 key + 指向 下⼀层节点的指针+ 指向 key 数据记录的地址。查找时,从根结点向下进⾏查找,直到找到对应的 key。

 

B+树:B+树是b树的变种,主要区别在于:B+树的⾮叶⼦节点只存储 key + 指向下⼀层节点的指针。 另外,B+树的叶⼦节点之间通过指针来连接,构成⼀个有序链表,因此对整棵树的遍历只需要⼀次线性遍历叶⼦结点即可。

相比B树,B+树进行范围查找时,只需要查找定位两个节点的索引值,然后利用叶子节点的指针进行遍历即可。而B树需要遍历范围内所有的节点和数据,显然B+Tree效率高。

MySQL数据库要⽤B+树存储索引⽽不⽤红⿊树、B树、 Hash的原因

  • 红⿊树:如果在内存中,红⿊树的查找效率⽐B树更⾼,但是涉及到磁盘操作,B树就更优了。因为红⿊树是⼆叉树,数据量⼤时树的层数很⾼,从树的根结点向下寻找的过程,每读1个节点,都相当于⼀次IO操作,因此红⿊树的I/O操作会⽐B树多的多
  • hash 索引:如果只查询单个值的话,hash 索引的效率⾮常⾼。但是 hash 索引有⼏个问题:

    1)不⽀持范围查询;2)不⽀持索引值的排序操作;3)不⽀持联合索引的最左匹配规则。

  • B树索引:B树索相⽐于B+树,在进⾏范围查询时,需要做局部的中序遍历,可能要跨层访问,跨层访问代表着要进⾏额外的磁盘I/O操作;另外,B树的⾮叶⼦节点存放了数据记录的地址,会导致存放的节点更少,树的层数变⾼

怎么验证 MySQL 的索引是否满足需求

使用 explain 查看 SQL 是如何执行查询语句的,从而分析你的索引是否满足需求。

聚簇索引和非聚簇索引

数据库中B+树索引分为聚集索引(clustered index)和非聚集索引(secondary index).

  • 这两种索引的共同点是内部都是B+树,高度都是平衡的,叶节点存放着所有数据。不
  • 同点是叶节点是否存放着一整行数据。

参考:聚集索引与非聚集索引_聚集索引和非聚集索引_车友车行·的博客-CSDN博客

  • B+Tree的叶子节点存放主键索引值和行记录(完整的表数据)就属于聚簇索引;

叶子节点存储的是 索引列字段 + 完整的行记录数据,通过聚集索引能直接获取到整行数据

Innodb 的主键索引就是基于聚集索引实现的,叶节点的数据就是我们要找的数据。

  • 如果索引值和行记录分开存放就属于非聚簇索引。
  • 通俗点讲
    聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据
    非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据

InnoDB的聚簇索引就是按照主键顺序构建 B+Tree结构。B+Tree的叶子节点就是行记录,行记录和主键值紧凑地存储在一起。 这也意味着 InnoDB 的主键索引就是数据表本身,它按主键顺序存放了整张表的数据,占用的空间就是整个表数据量的大小。通常说的主键索引就是聚集索引。 InnoDB的表要求必须要有聚簇索引(每个表只能有一个聚集索引/一个主键,因为目录只能按照一种方法进行排序 ):

  • 如果表定义了主键,则主键索引就是聚簇索引

  • 如果表没有定义主键,则第一个非空unique列作为聚簇索引

  • 否则InnoDB会从建一个隐藏的row-id作为聚簇索引

 

与InnoDB表存储不同,MyISAM数据表的索引文件和数据文件是分开的,被称为非聚簇索引结构。

 例子:表结构

 基于这张表的主键 id 建立的聚集索引:

 Myisam 以 id 为主键建立的非聚集索引:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蚂蚁Ant Design组件库的免费在线资源

Ant Design(蚂蚁组件)是蚂蚁集团体验技术部经过大量项目实践和总结,逐步打磨出的一个设计系统,内含带有 React 的 UI 库。它是为企业级产品设计而创建的。Ant Design 提供了高质量的交互界面设计组件和演示。作为 UI 设计师&#…

Spring:Spring框架结构 ②

一、结构体现的价值 1、可读性强。 2、可维护性。 3、优秀的框架均具有分而治之的思想。清晰的设计、合理的归类、模块化是走向优秀框架的基础性武器。 二、Spring框架的模块划分 1、整体轮廓 Spring框架包含的功能大约由20个小模块组成。这些模块按组可分为核心容器(Core Co…

独立、相关、正交

文章目录 【1. 独立】【2. 相关】【3.正交】【4. 相互关系】相关和独立相关和正交独立和正交独立、不相关和正交小结 【5. 参考文献】 【1. 独立】 独立:对于两个随机变量 y 1 y_1 y1​ 和 y 2 y_2 y2​,若 y 1 y_1 y1​ 的有关信息不给出 y 2 y_2 …

基于AT89C52单片机的无线温度监测设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87848530?spm1001.2014.3001.5503 源码获取 主要内容: 设计一个温度监测器,温度异常时警报器能够响起,设定初始温度&#xff0…

0基础学习VR全景平台篇第33章:场景功能-嵌入标尺

功能位置示意 一、本功能将用在哪里? 嵌入功能可对VR全景作品嵌入【图片】【视频】【文字】【标尺】四种不同类型内容; 本次主要带来标尺类型的介绍,可对VR全景作品中,位置信息较多的场景进行标注,在单场景中植入更多…

R-Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合实践

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

linux守护进程简单创建

1.什么是守护进程? 守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引 导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。 用户使守护进程独立…

平行云X火山引擎:探索XR观展的极致体验

5月20日,素有艺术界“奥林匹克”之称的第18届威尼斯国际建筑双年展(以下简称“威尼斯双年展”)中国国家馆展览正式开幕。 威尼斯双年展为当今世界规模最大、最具影响力的国际艺术盛事之一,中国文化和旅游部自2005年起主办中国国家…

六一儿童节海外网红营销指南:出海品牌的增长秘诀

六一儿童节作为全球范围内备受关注的节日之一,为孩子们提供了欢乐和庆祝的机会。对于出海品牌来说,利用六一儿童节进行海外网红营销不仅可以吸引年轻消费者的关注,还能够增加品牌的知名度和影响力。根据行业研究机构Statista的数据&#xff0…

第十三章行为型模式—模板模式

文章目录 模板模式解决的问题结构实例存在的问题适用场景 JDK源码 - InputStream 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为…

hive如何实现oracle的connect by prior函数

Hive中如何实现层级查询 类似oracle中 connect by prior 实现的效果? - 知乎 大佬写的很详细,有兴趣自己看,但是存在一个问题 create table test.emp ( empno string, ename string, job string, mgr strin…

如何使用MapStruct优雅的告别get,set

我们开发过程中会遇到很多bean拷贝的过程,最简单粗暴得方法就是set/get方法,当然这也是最臃肿的方法,代码显得过于冗长和笨重,其次还有框架BeanUtils在使用反射的时候都会影响到性能。虽然我们可以进行反射信息的缓存来提高性能。…

网络安全实用篇—iptables防火墙学习总结

iptables防火墙学习总结 目录 iptables简介: iptables题目练习: 题目包含(市赛、省赛、国赛)覆盖所有比赛面! iptables简介: Iptables是Linux系统中的一个防火墙工具,它可以对进出本机的…

用Photoshop软件制作法线图以及查看效果细节

这里是在windows系统下用PS2020做演示。 第一步、在Photoshop软件中打开一张图(最好是正方形,边长是2的n次方大小的像素,例如宽和高都是512像素),如下图所示: 第二步、在菜单栏选择滤镜然后再选择3D接着再选择生成法线图&#xf…

【漏洞复现】DedeCMS存在文件包含漏洞导致后台getshell(CVE-2023-2928)

复现环境下载 https://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7.106-UTF8.zip 影响版本 DedeCMS V5.7.106 CNVD编号:CNVD-2023-40504 漏洞分析 漏洞文件: uploads/dede/article_allowurl_edit.php存在缺少对该文件中写入内容的任何过滤是导致该漏洞的…

程序员的新型开发工具——低代码平台

低代码的热潮至今未消停, 从阿里钉钉跨平台协作方式,再到飞书上的审批流程,以及目前我们接触到的表单审批、投票的模板,这些都是关于低代码的实现方式。 一、低代码平台概述 按维基百科的说法,低代码这个称呼是 Forres…

大数据时代,Python实现API调用的步骤及示例代码;

Python是一种非常流行的编程语言,可以用于实现各种各样的应用程序,其中包括通过API对各种服务进行调用。API是应用程序接口的缩写,它提供了一种编程接口,允许软件开发者使用其他服务的功能,包括访问数据库、发送电子邮…

【重磅发布】谷云科技与海量数据完成产品兼容性互认证!

近日,谷云科技(广州)有限责任公司(以下简称“谷云科技”)的混合集成平台(ipaas)、全域数据交换平台、主数据管理平台与北京海量数据技术股份有限公司(以下简称“海量数据”)的海量数据库G100管理…

代码随想录算法训练营day57 | 647. 回文子串,516.最长回文子序列,动态规划总结篇

代码随想录算法训练营day57 | 647. 回文子串,516.最长回文子序列,动态规划总结篇 647. 回文子串解法一:动态规划解法二:双指针中心扩散法 516.最长回文子序列解法一:动态规划 动态规划总结篇动划基础背包问题系列打家劫…

网络安全基本概念

一、什么是网络安全 (1)网络安全 网络安全指网络系统中的硬件、软件以及系统中的数据受到保护,不因偶然或恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。 网络安全包括:网络…