MySQL8.0优化 - 索引的数据结构

news2024/11/25 9:40:55

文章目录

  • 学习资料
  • 索引的数据结构
    • B+树
    • 常见索引概念
      • 聚簇索引
        • 特点
        • 优点
        • 缺点
        • 限制
      • 二级索引(辅助索引、非聚簇索引)
        • 回表
        • 联合索引
    • Innodb的B+树索引注意事项
      • 1、根页面位置万年不动
      • 2、内节点中目录项记录的唯一性
      • 3、一个页面最少存储2条记录
    • 索引的代价


学习资料

【MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!-哔哩哔哩】
【阿里巴巴Java开发手册】https://www.w3cschool.cn/alibaba_java

索引的数据结构

B+树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
这个数据结构,它的名称是B+树

默认数据页大小为16kb

在这里插入图片描述

常见索引概念

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

聚簇索引

聚簇索引并不是一种单独的索引类型,而是一种数据存储方式(所有的用户记录都存储在了叶子节点),也就是所谓的索引及数据,数据及索引

术语“聚簇”表示数据和相邻的键值聚簇的存储在一起。

特点

1、使用记录主键值的大小进行记录和页的排序,这包括三个方面的含义:
页内的记录是按照主键的大小顺序排成一个单向链表
各个存放用户记录的页也是根据页中用户记录的主键大小顺序排成一个双向链表
存放目录项记录的页分为不同的层次,在同一层次中的页也是根据页中目录项记录的主键大小顺序排成一个双向链表

2、B+树的叶子节点存储的是完整的用户记录。
所谓完整的用户记录,就是指这个记录中存储了所有列的值(包括隐藏列)。
我们把具有这两种特性的B+树称为聚簇索引,所有完整的用户记录都存放在这个聚簇索引的叶子节点处。这种聚簇索引并不需要我们在MySQL语句中显式的使用INDEX语句去创建,InnoDB存储引擎会自动为我们创建聚簇索引。

优点

数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树种,因此聚簇索引中获取数据比非聚簇索引更快。
聚簇索引对于主键的排序查找范围查找速度非常快。
按照聚簇索引排列的顺序,查询显示一定范围数据的时候,由于数据都是紧密相连,数据库不用从多个数据块中提取数据,所以节省了大量的io操作

缺点

插入速度严重依赖插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义为一个自增的ID列为主键
更新主键的代价很高,因为将会导致被动更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。
二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。

限制

对于MySQL数据库目前只有InnoDB数据引擎支持聚簇索引,而MyISAM并不支持聚簇索引。
由于物理存储排序方式只能有一种,所以每个MySQL的表只能有一个聚簇索引。一般情况下就是该表的主键。
如果没有定义主键,Innodb会选择非空的唯一索引代替,如果没有这样的索引,Innodb会隐式的定义一个主键来作为聚簇索引。
为了充分利用聚簇索引和聚簇的特性,所以Innodb表的主键尽量选用有序的顺序id,而不建议无序的id,比如UUID、MD5、HASH、字符串列作为主键无法保证数据的顺序增长。

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

在这里插入图片描述

回表

在这里插入图片描述
在这里插入图片描述

聚簇索引与非聚簇索引原理不同,在使用上也有一些区别:
1、聚簇索引的叶子结点存储的就是我们的数据记录,非聚簇索引的叶子节点上存储的是数据位置。非聚簇索引不会影响数据表的物理存储顺序。
2、一个表只能有一个聚簇索引,因为只能有一种排序存储方式,但可以有多个非聚簇索引,也就是多个索引目录提供数据检索。
3、使用聚簇索引的时候,数据的查询效率高,但如果对数据进行插入、删除、更新的操作,效率会比非聚簇索引低。

联合索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Innodb的B+树索引注意事项

1、根页面位置万年不动

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

MySQL会自动给每个页里加两条记录,由于这两条记录不是我们自己插入的,所以有时候也称伪记录虚拟记录。这两个伪记录一个代表最小记录,一个代表最大记录

索引的代价

在这里插入图片描述

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

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

相关文章

Python可视化必备,在Matplotlib/Seaborn中轻松玩转图形拼接!

数据展示时,在同一页面上混合排版多个图形是一种常见的用法。 本次分享一个Python轮子patchworklib: 通过|、/轻松实现图形排列;比matplotlib、seaborn等自带子图功能更加灵活;灵感源于R中的patchwork。目录 在Matplotlib中使用…

【Java学习笔记】第四章 面向对象编程三部曲(中)

【Java学习笔记】第四章 面向对象编程三部曲(上) 【Java学习笔记】第四章 面向对象编程三部曲(中) 【Java学习笔记】第四章 面向对象编程三部曲(下) 文章目录5. 面向对象编程(中)5…

gdb调试 入门

程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。 You can run "gdb" with no arguments or options; but the most usualway to start GDB is with one argume…

ANDROID ROOT FIDDLER HTTPS 抓包

参考 adb 修改手机代理方式_userwyh的博客-CSDN博客_adb shell settings put global http_proxy 手机模拟器安装证书并抓包_虚无-缥缈的博客-CSDN博客_模拟器安装证书 安卓手机使用adb添加系统证书方法 - 知乎 设置设备代理(需要ROOT 设置代理: adb…

【重新安装Anaconda心得】

文章目录(一)环境变量设置(二)Anaconda添加镜像源【可以使用境外流量不用添加】(三)创建虚拟环境的细节(四)补充:conda的常用命令(一)环境变量设置…

算法篇------贪心1

文章目录贪心的概念题目1------经典的选择排序(简单)题目2----平衡字符串(简单)题目3---买卖股票的最佳时间(中等)题目4------跳跃游戏(中等)题目5-------钱币找零题目6------多机调度的问题贪心的概念 什么是贪心算法&#xff1…

ATF源码篇(九):docs文件夹-Components组件(8)固件升级

固件更新(FWU) 本文档描述了TF-A中可用的各种固件更新(FWU)机制的设计。 1、PSA固件更新(PSA FWU)-平台安全架构2、TBBR固件更新(TBBR FWU)-可信板引导要求 PSA固件更新实施了同名…

[附源码]java毕业设计课程作业管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

vtk拾取器-vtkAbstractPicker/vtkCellPicker

创建了VTK社区,欢迎大家加入雪易社区-CSDN社区云 简介:此文主要介绍vtk中的拾取器的用法,若能为各位小伙伴解决一些困扰就更好了。非常欢迎各位小伙伴指正并补充。 1. vtkAbstractPicker vtkAbstractPicker是vtk拾取器的基类,为…

2022下半年《软考-系统架构设计师》备考经验分享

前言 我参加了2022年11月份的《软考-系统架构设计师》考试,在一个多月的备考之中我总结了一些学习经验和答题技巧,现毫无保留的分享给大家,希望对报考的同学们有所帮助。彩蛋:关注我的公众号【劼哥舍】,回复“软考”即…

dubbo:docker安装dubbo-admin

0.引言 我们在搭建dubbo框架时,需要安装一个dubbo-admin来管理服务已经配置文件,今天我们来看看如何通过docker快速搭建一个dobbo-admin 1. 安装 1、首先到dockerhub上搜索dubbo-admin的镜像源 2、可以看到两个引用较高的镜像源,第一个是a…

SpringCloud和SpringBoot在调Feign传文件时的异常汇总及解决办法

主要记录SpringCloud在调Feign传文件时的问题: 1.(按注意点2改正即可) Current request is not a multipart request(按注意点2改正即可) 2.(按注意点3处理即可) The field files exceeds it…

Pytorch框架基础

目录 1-02张量的简介与创建 pytorch中的Tensor 张量的创建 1-03张量的操作 1. 拼接 2.张量的拼接与切分 3.张量索引 4.张量变换 1-02张量的简介与创建 张量是一个 ,它是标量,向量,矩阵的高维拓展 pytorch中的Tensor 在pytorch中的属…

【C++】C++基础知识(七)---指针

C基础知识(七)1. 指针的定义与使用2. 指针的内存3. 空指针和野指针4. const修饰指针5. 指针与数组6. 指针与函数7. 指针用于数组和函数的案例1. 指针的定义与使用 指针的作用: ------通过指针可以直接的访问变量的内存,内存编号一…

企业在线培训场景下讲师+ppt课件直播应用效果

阿酷TONY / 原创 / 2022-11-17 / 长沙 企业在线培训场景下讲师ppt课件直播应用效果 : 图 / 直播示意图 设备需求: 1. 现场布摄像头,用于采集讲师摄像头视频和音频数据; 2. PC电脑或笔记本电脑一台( 安装直播客户端&…

学会Python开发的第一步:写一个桌面小程序

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 当使用桌面应用程序的时候,有没有那么一瞬间, 想学习一下桌面应用程序开发? 建议此次课程大家稍作了解不要浪费太多时间, 因为没有哪家公司会招聘…

科普系列:AUTOSAR与OSEK网络管理比较(下)

在上篇中我们分别在状态机和报文格式方面对OSEK和AUTOSAR网络管理进行了简单介绍,感兴趣的小伙伴请移步至文章《科普系列:AUTOSAR与OSEK网络管理比较(上)》。 三、OSEK与AUTOSAR网络管理特点对比 本篇就是本文的重点了&#xff…

华为机试 - 区间交集

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 给定一组闭区间,其中部分区间存在交集。 任意两个给定区间的交集,称为公共区间(如:[1,2],[2,3]的公共区间为[2,2],[3,5],[3,6]的公共区间为[3,5])。 公共区间之间…

Springboot普通类获取运行时环境,获取运行时容器,获取Bean,等等获取运行时一切参数总结大全

文章目录获取ApplicationContextApplicationContext有什么用获取ApplicationContext使用ApplicationContext获取EnvironmentEnvironment有什么用获取Environment使用Environment获取ApplicationContext ApplicationContext有什么用 ApplicationContext为应用程序提供配置的中…

供应点击化学PEG试剂Azide-PEG-Rhodamine B,叠氮聚乙二醇罗丹明

点击化学PEG试剂——叠氮-聚乙二醇-罗丹明,化学试剂其英文名为Azide-PEG-Rhodamine B,N3-PEG-RB,它所属分类为Azide PEG Fluorescent PEG。 peg试剂的分子量均可定制,有:5000、2000、1000、3400、10000、20000 。该试…