【MySQL高级篇笔记-索引的数据结构 (中) 】

news2024/11/28 11:33:41

此笔记为尚硅谷MySQL高级篇部分内容

目录

一、索引及其优缺点

1、索引概述

2、优点

3、缺点

二、InnoDB中索引的推演

1、设计索引

1.一个简单的索引设计方案

2.InnoDB中的索引方案

2、常见索引概念

1. 聚簇索引

2. 二级索引(辅助索引、非聚簇索引)

3. 联合索引

3、InnoDB的B+树索引的注意事项

1. 根页面位置万年不动

2. 内节点中目录项记录的唯一性

​编辑

​编辑

​编辑3. 一个页面最少存储2条记录

三、MyISAM中的索引方案 

MyISAM 与 InnoDB对比

小结

四、索引的代价

五、MySQL数据结构选择的合理性

全表遍历

Hash结构

二叉搜索树

AVL树

B-Tree

B+Tree

思考题 

R树

小结 

算法的时间复杂度


一、索引及其优缺点


1、索引概述

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。
索引的本质:索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。
这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法 

2、优点

(1)类似大学图书馆建书目索引,提高数据检索的效率,降低 数据库的IO成本 ,这也是创建索引最主要的原因。

(2)通过创建唯一索引,可以保证数据库表中每一行 数据的唯一性

(3)在实现数据的参考完整性方面,可以 加速表和表之间的连接 。换句话说,对于有依赖关系的子表和父表联合查询时,可以提高查询速度。

(4)在使用分组和排序子句进行数据查询时,可以显著 减少查询中分组和排序的时间 ,降低了CPU的消耗。

3、缺点

增加索引也有许多不利的方面,主要表现在如下几个方面:

(1)创建索引和维护索引要 耗费时间 ,并且随着数据量的增加,所耗费的时间也会增加。 (2)索引需要占 磁盘空间 ,除了数据表占数据空间之外,每一个索引还要占一定的物理空间, 存储在磁盘上 ,如果有大量的索引,索引文件就可能比数据文件更快达到最大文件尺寸。

(3)虽然索引大大提高了查询速度,同时却会 降低更新表的速度 。当对表中的数据进行增加、删除和修改的时候,索引也要动态地维护,这样就降低了数据的维护速度。因此,选择使用索引时,需要综合考虑索引的优点和缺点。

二、InnoDB中索引的推演


在没有索引的情况下,不论是根据主键列或者其他列的值进行查找,由于我们并不能快速的定位到记录所在的页,所以只能 从第一个页 沿着 双向链表 一直往下找,在每一个页中根据我们上面的查找方式去查找指定的记录。因为要遍历所有的数据页,所以这种方式显然是 超级耗时 的。如果一个表有一亿条记录呢?此时 索引 应运而生。

1、设计索引

1.一个简单的索引设计方案

2.InnoDB中的索引方案

① 迭代1次:目录项纪录的页

从图中可以看出来,我们新分配了一个编号为30的页来专门存储目录项记录。这里再次强调 目录项记录和普通的 用户记录 的不同点

相同点: 

② 迭代2次:多个目录项纪录的页

③ 迭代3次:目录项记录页的目录页

④ B+Tree

2、常见索引概念

索引按照物理实现方式,索引可以分为 2 种:聚簇(聚集)和非聚簇(非聚集)索引。我们也把非聚集索引称为二级索引或者辅助索引。

1. 聚簇索引

2. 二级索引(辅助索引、非聚簇索引)

3. 联合索引

3、InnoDB的B+树索引的注意事项

1. 根页面位置万年不动

理解形成过程

2. 内节点中目录项记录的唯一性


3. 一个页面最少存储2条记录

三、MyISAM中的索引方案 


MyISAM索引的原理图

MyISAM 与 InnoDB对比

小结

四、索引的代价


索引是个好东西,可不能乱建,它在空间和时间上都会有消耗:

  • 空间上的代价      
  • 时间上的代价

五、MySQL数据结构选择的合理性


全表遍历

Hash结构

 

Hash索引适用存储引擎如表所示:

二叉搜索树

如果我们利用二叉树作为索引结构,那么磁盘的IO次数和索引树的高度是相关的。

AVL树

B-Tree

B+Tree

B+ 树和 B 树的差异:

1. 有 k 个孩子的节点就有 k 个关键字。也就是孩子数量 = 关键字数,而 B 树中,孩子数量 = 关键字数+1。

2. 非叶子节点的关键字也会同时存在在子节点中,并且是在子节点中所有关键字的最大(或最小)。
3. 非叶子节点仅用于索引,不保存数据记录,跟记录有关的信息都放在叶子节点中。而 B 树中,
非叶子节点既保存索引,也保存数据记录 。
4. 所有关键字都在叶子节点出现,叶子节点构成一个有序链表,而且叶子节点本身按照关键字的大小从小到大顺序链接。

思考题 

思考题:为了减少IO,索引树会一次性加载吗?


思考题:B+树的存储能力如何?为何说一般查找行记录,最多只需1~3次磁盘IO


思考题:为什么说B+树比B-树更适合实际应用中操作系统的文件索引和数据库索引?


思考题:Hash 索引与 B+ 树索引的区别


思考题:Hash 索引与 B+ 树索引是在建索引的时候手动指定的吗? 

R树

小结 

算法的时间复杂度


同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。

高级篇笔记PDF自取

链接:https://pan.baidu.com/s/1pVqrTwIZFoED77i-EFmw6g?pwd=3333 
提取码:3333

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

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

相关文章

Java阶段三Day06

Java阶段三Day06 文章目录 Java阶段三Day06同步请求和异步请求案例演示创建SpringBoot工程application.propertiesUserControllerUserMapper静态页面 JSONSpring Security引入SpringSecurity框架对项目的影响关于SpringSecurity的配置默认登录表单设置白名单模拟登录使用自己的…

用pycharm来下载super-grandients 出现的错误

主要用来记录我用pycharm来下载super-grandients的一些错误 文章目录 1、UserWarning: Distutils was imported before Setuptools.1、distutils 2、pycharm的虚拟环境安装的包在c盘3、虚拟内存不够 1、UserWarning: Distutils was imported before Setuptools. UserWarning: …

系统集成项目管理工程师(系统集成基础知识)

第一章信息化知识 一、信息的概述 1、信息(information)是客观事物状态和运动特征的一种普遍形式;事物的本体论信息,就是事物的运动状态和状态变化方式的自我表述。 二、信息的传递 2、信息技术主要为解决信息的采集、加工、存储、传输、处理、计算、…

设计模式之~适配器模式

描述: adapter将一个类的接口转换成客户希望的另外一个接口。adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。 在软件开发中,当系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的…

Node.js详解(二):Node.js与JS的关系

一、简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。 JavaScript一种直译式脚本语言,是一种…

NMS非极大值抑制

文章目录 一、NMS详解二、NMS具体步骤与实现1.步骤2、代码(pytorch版本) 一、NMS详解 NMS即非极大值抑制,常被用于目标检测等,即只保留检测同一物体置信度最大的框。 具体作用可以看图: 可以看出,未经过nms的图片,有…

基于Freertos的ESP-IDF开发——8.使用wifi访问HTTP服务器

目录 0. 前言其他ESP-IDF文章 1. 前期准备1.1头文件准备1.2 http 服务器搭建 2. 连接 wifi3.http访问任务4. 完整代码 0. 前言 使用ESP32使用 wifi 访问 http 服务器 开发环境:ESP-IDF 4.2 操作系统:Ubuntu22.04 开发板:自制的ESP32-WROOM-…

流行框架(二)网络请求库 OKhttp

文章目录 概述HttpURLConnectionGET和POST获取文本数据GETPOST OKHttp基本使用依赖与权限发起一个get请求重要概念OkHttpClientRequestCallRealCallAsyncCall 请求调度器Dispatcher同步请求execute的执行异步请求enqueue的执行两种请求方式的总结 OkHttp拦截器链拦截器种类addI…

字节狂问1小时,小伙offer到手,太狠了!(字节面试真题)

前言: 在尼恩的(50)读者社群中,经常有小伙伴,需要面试 头条、美团、阿里、京东等大厂。 下面是一个小伙伴成功拿到字节飞书offer,通过一小时拷问的面试经历,就两个字: 深&#xf…

基于STM32的SYN6288语音播报模块驱动实验(代码开源)

前言:本文为手把手教学 SYN6288 语音播报模块的驱动实验,本教程的 MCU 采用STM32F103ZET6。通过 CubeMX 软件配置 UART 串口协议驱 SYN6288 模块进行规定的语音播报。考虑到 SYN6288 模块的集成化与智能化很高,所以该模块的使用是极其便利的。…

【HarmonyOS】初识低代码平台开发元服务

【关键字】 HarmonyOS、低代码平台、元服务开发、拖拽式开发 【写在前面】 今天要分享的是HarmonyOS中的低代码开发相关的内容,低代码开发是DevEco Studio提供的一种UI界面可视化的构建方式,通过图形化的自由拖拽数据的参数化配置,可以快速…

【Java项目】基于SpringBoot+Vue的校园二手商品交易平台

文章目录 功能简述功能展示用户模块购物车模块管理员模块物物对价功能实现 代码 视频演示 代码下载 项目内含有 功能简述 系统登录界面的实现 系统首页界面的实现 用户信息管理界面的实现 商品购物功能的实现 购物车管理功能及支付功能的实现 物物对价功能的实现 用户安全设置…

【面试需了解】jvm垃圾回收机制-GC基础知识、jvm基本组成、查看、排查

前言 jvm垃圾回收机制-GC基础知识、jvm基本组成、查看、排查 文章目录 前言GC基础知识概述 JVM基本组成1. 虚拟机的组成2. jvm的内存区域 查看jvm排查jvm问题1. 正常运行的系统2. 对于已经发生了OOM的系统 GC基础知识 概述 什么是垃圾 一个对象没有被引用,没有任何…

Spring MVC详解(学习总结)

一、Sprig MVC简介1.1介绍1.2MVC是什么 二、Spring MVC实现原理2.1核心组件2.2工作流程 三、第一个Spring MVC四、常用注解五、参数绑定5.1URL风格参数绑定5.2RESTful风格的URL参数获取5.3映射Cookie5.4使用POJO绑定参数5.5JSP页面的转发和重定向 六、Spring MVC数据绑定6.1基本…

vulnstack(红日)内网渗透靶场二: 免杀360拿下域控

前言 在我之前的文章vulnstack(一)打靶,我主要依赖Cobalt Strike进行后期渗透测试,这次我计划使用Metasploit框架(MSF)来进行这个阶段的工作。这个靶场与之前的不同之处在于它的WEB服务器安装了360安全卫士。虽然这增加了挑战的难度,但只要我…

Shell脚本攻略:循环语句while、until

目录 一、理论 1.while 2.until 3.break 4.continue 二、实验 1.实验一 2.实验二 3.实验三 4.实验四 5.实验五 一、理论 1.while (1)while用法 while循环满足条件执行,不满足不执行。 用于不知道循环次数,需要主动结束循环或达到条件结束…

二开项目权限应用全流程-按钮级控制

二开项目权限应用全流程-按钮级控制 员工A和员工B都可以访问同一个页面(以员工管理为例),但是员工A可以导出excel,员工B就不可以导出excel(看不到按钮) 思路 用户登陆成功后,用户可以访问的按钮级别权限保存在point…

阿里巴巴淘天集团后端暑期实习面经

目录 1.面向对象三大特性2.重写和重载3.protected 关键字和 default 关键字的作用范围4.栈帧中有哪些东西?5.堆中有哪些区域?6.new 一个对象存放在哪里?7.CMS 收集器回收阶段8.CMS 收集器回收过程哪些需要暂停线程?9.HashMap JDK …

手机行业再多一条“鲶鱼”,小度青禾要打一场漂亮突围战?

文 | 智能相对论 作者 | 佘凯文 智能手机到底还是不是一门好生意? 在换机周期被无限拉长、市场竞争越发激烈、高端市场迟迟无法突破等共同背景下,智能手机到底还是不是一门好生意,成为行业内这两年被热议的话题之一。 由TechInsights发布…

腾讯云轻量应用服务器CPU主频多少?型号?

腾讯云轻量应用服务器CPU型号是什么?轻量服务器处理器主频?腾讯云服务器网账号下的CPU处理器型号为2.5GHz主频的Intel(R) Xeon(R) Gold 6133 CPU和2.4GHz主频Intel(R) Xeon(R) CPU E5-26xx v4,腾讯云轻量应用服务器不支持指定底层物理服务器的…