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

news2024/11/29 16:26:44

此笔记为尚硅谷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/589885.html

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

相关文章

Node.js详解(一):基础知识

文章目录 一、Node.js介绍二、Node.js的优势三、Node.js的特点1、V8虚拟机2、事件驱动3、异步、非堵塞I/O 四、NodeJS带来的对系统瓶颈的解决方案1. 并发连接2. I/O阻塞 五、NodeJS的优缺点1、优点:2、缺点: 六、适合NodeJS的场景1、RESTful API2、统一W…

VMware、Ubuntu安装以及虚拟机复制粘贴问题

安装VMware 下载阿里云链接(16 pro):VMware https://www.aliyundrive.com/s/ot9dhPNdSwC 安装:选一下安装地址,一直下一步即可。(可能会要求重启电脑,重启即可) 然后点击“许可证”…

Java 高级应用-多线程-(四)FutureTask的介绍及使用

Java多线程之FutureTask的介绍及使用 FutureTask属于java.util.concurrent 包;FutureTask表示可取消的异步计算。FutureTask类提供了一个Future的基本实现 ,具有启动和取消计算的方法,查询计算是否完整,并检索计算结果。结果只能…

Camtasia2023试用版新功能介绍

Camtasia 2023在易用性更进一步,再一次降低了制作精美视频的门槛,下面看一看,Camtasia 2023有哪些的新功能!包括影像、音效、鼠标移动轨迹、解说声音等等内容的录制,并且软件还可以提供即时播放和编辑压缩的功能&#…

如何监控电动车充电桩能耗?

一 背景 随着新能源汽车的快速发展,像特斯拉、BYD、蔚来、小鹏和理想等品牌的电动汽车在我们的日常生活中越来越多了,可见电动汽车如今已逐渐被我们所认可了。同汽油车需要加油一样,电动汽车需要充电,如此一来,电动汽…

第14届蓝桥杯省赛真题剖析-2023年5月7日Scratch编程中级组

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第142讲。 第14届蓝桥杯Scratch省赛真题,这是2023年5月7日举办的省赛中级组试题,比赛仍然采取线…

洗地机充电底座语音芯片选型?NV040DS语音芯片

一、洗地机语音提示功能的价值 洗地机充电底座加入语音提示功能,主要是为了提高洗地机的智能化程度和使用便利性! 1. 提高使用效率:底座语音提示充电状态可以使用户更方便地掌握底座电量和洗地机的使用情况,从而更快捷地对底座进…

ProtoBuf 语法(二)

系列文章 ProtoBuf 语法(一) ProtoBuf 语法(三) 文章目录 八、更新消息8.1 更新规则8.2 reserved 保留字段8.3 验证错误删除字段造成的数据损坏8.4 未知字段及其获取方法8.5 验证未知字段 八、更新消息 8.1 更新规则 如果现有的…

mysql中的count(1)、count(*)、count(id)哪个更快?

今天和大家聊一下mysql中的count()方法 我们日常开发中,经常会用到count()命令,有的人用count(*),有的人用count(1),还有的人用count(id),那么这几种写法都有什么区别呢?哪种方法效率更高呢?今…

LangChain 查询使用指「北」

一只鹦鹉加上一根链条,组成了时下最流行的 AI 话题热门榜选手——LangChain。 LangChain 是一种 AI 代理工具,可以为以 ChatGPT 为代表的额大语言模型(LLM)增添更多功能。此外,LangChain 还具备 token 和上下文管理功能…

提高水泵可靠度与生产效率:故障诊断系统实践解析

水泵作为工厂生产线中不可或缺的设备之一,其正常运行对于生产效率和设备可靠性至关重要。然而,水泵故障可能会导致设备停机和生产中断,给企业带来巨大损失。 图.水泵(iStock) 为了解决这一问题,水泵健康管理…

机器人中的数值优化(四)—— 线搜索求步长(附程序实现)

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…

CentOS7下更改、移动mysql数据存储的位置 附os 错误码13问题

1、看一下目前mysql数据存储的位 select datadir;从这个结果我们可以看出,当前mysql的datadir是在/var/lib/mysql 目录里的 2、关掉连接mysql的各种程序服务 systemctl stop mysqld 或 service mysql stop 3、在期望的位置创建目录(datadir的新位置&a…

【走进Java框架】什么是Java框架,为什么要学习Java框架.

前言: 大家好,我是良辰丫,今天我们就要开始Java框架之旅了,我们在学习的征途中不断充实自己,提升自己的能力,加油哈,自我勉励一下,跟随我的步伐,一起前行哈.💌💌💌 🧑个人主页:良辰针不戳 📖所属专栏&#…

【前端面试知识点】- 大厂面试(四)

目录 1.什么是尾调用,使用尾调用有什么好处?2.ES6 模块与 CommonJS 模块有什么异同?3.for…in 和 for…of 的区别4.ajax、axios、fetch(前台请求后台数据的方式)5. parseInt()的用法6.浏览器运行机制7.border-radius:50%和100%究竟有什么区别…

Ansible从入门到精通【四】

大家好,我是早九晚十二,目前是做运维相关的工作。写博客是为了积累,希望大家一起进步! 我的主页:早九晚十二 专栏名称:Ansible从入门到精通 立志成为ansible大佬 ★ansible-playbook应用 play-book的介绍pl…

lmsys.org最新的LLM排行榜

lmsys.org Large Model Systems Organization (LMSYS Org) 是一个开放的研究组织,由加州大学伯克利分校的学生和教师与加州大学圣地亚哥分校和卡内基梅隆大学合作创立。 他们的目标是通过共同开发开放数据集、模型、系统和评估工具,让每个人都能访问大…

App 应用测试方法以及测试思路

分析三种主流的移动 App 类型,并给出和普通web测试不同的地方,给出测试的思路,并给出部分场景组合。 移动端测试还是 PC 端测试,业务测试其实都属于 GUI 测试的范畴,所以基本的测试思路,比如基于页面对象封…

清凉一夏小风扇-Vue3版

这里写目录标题 前言 一、效果二、代码分享 前言 本片文章主要是做一个小练习,通过Vue来制作一个风扇练习css动画。 上一篇文章主要是讲解了React实现的部分 React实现部分看这里–> 一、效果 二、代码分享 1、主体框架 “sass”: “^1.62.1”, “vue”: “^3…

dvwa靶场通关(四)

第4关:File Inclusion(文件包含) 1.什么是文件包含? 程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需再次编写,这种调用文件的过程一般…