MySQL--优化(索引)

news2025/6/9 21:21:20

MySQL–优化(索引篇)

  1. 定位慢查询
  2. SQL执行计划
  3. 索引
    • 存储引擎
    • 索引底层数据结构
    • 聚簇和非聚簇索引
    • 索引创建原则
    • 索引失效场景
  4. SQL优化经验

索引

索引(index)是帮助 MySQL 高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定査找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

一、 例子(理解索引的用处)

无索引
  • 当前我们有一张表,里面有很多条数据
  • 现在我们要去查年龄为 45 的数据
  • 在没有索引的情况,age会逐条的进行比对,当找到了 45 也不会停,他会接着往下找,直到整张表多遍历一遍
    在这里插入图片描述
有索引

比如维护了一个索引(二叉搜索数)MySQL 中的索引不是(二叉搜索数),说到二叉树是方便理解

  • 首先找当前二叉树的根节点 36 (拿45跟36作比对,45比36大),走右边找到 37(拿45跟47作比对,45比48小)走左边找到 45
  • 这个效率就有明显的提升,这个就是索引的好处(提升查找效率)

在这里插入图片描述

总结
  1. 我们需要维护一个像(二叉搜索数)
  2. 有个这样一个数据结构,在查找数据的时候可以提升查找效率,减少 IO 的操作

二、索引的底层数据结构

  • 在探讨MySQL索引之前,我们需要先了解几种常见的数据结构:二叉搜索树、红黑树、B树和B+树。每种数据结构都有其独特的工作原理和优缺点。

三、数据结构对比

1、二叉搜索树
  • 虽然二叉搜索树在理想情况下具有较高的查询效率,但一旦数据不平衡,其性能将大幅下降。
    在这里插入图片描述
2、红黑数
  • 红黑树通过自平衡机制解决了这一问题,但由于其每个节点最多只有两个子节点,因此在处理大量数据时,树的高度会显著增加,导致查询效率降低。
  • 那假如 MySQL 某张表的数据是 1千万 ,而红黑树也是一个二叉树,一个节点只能有两个分支,如果把1千万的数据存储到红黑树中,那么这个红黑树就会变得特别的高,要去查找的数据依然要去找很多个层级
    在这里插入图片描述
3、B 树
  • B树是一种多叉树结构,与二叉树相比,它能够减少树的高度,从而提高查询效率。然而,B树在非叶子节点中既存储键也存储数据,这在处理大量数据时可能导致磁盘IO操作增多。
  • B树每个节点可以有多个分支,即多叉。
  • 以一颗最大度数(max-degree)为5(5阶)的b-tree为例,那这个B树每个节点最多存储4个key
    在这里插入图片描述
  • 每个key多有指针,图中key20指针所对应的20以内的数据
    在这里插入图片描述
  • 其中每个key对应的数据

在这里插入图片描述

4、B + 树
  • B+树是B树的一种优化版本。
  • 它在非叶子节点中仅存储键和子节点的指针,而将数据全部存储在叶子节点中。
  • 这种设计使得B+树的查询效率更加稳定,且更适合于磁盘等辅助存储器的数据读写操作。
  • 此外,B+树的叶子节点之间通过指针相连,便于进行范围查询和扫库操作。
    在这里插入图片描述

总结

  • 什么是索引
    • 索引(index)是帮助MySQL高效获取数据的数据结构(有序)
    • 提高数据检索的效率,降低数据库的I0成本(不需要全表扫描)
    • 通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗
  • 索引的底层数据结构
    • MySQL的InnoDB引擎采用的B+树的数据结构来存储索
    • B+树 阶数更多,路径更短
    • 磁盘读写代价B+树更低,非叶子节点只存储指针,叶子阶段存储数据
    • B+树便于扫库和区间查询,叶子节点是一个双向链表

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

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

相关文章

【记录37】VueBaiduMap 踩坑一

截图 错误 Error in callback for watcher “position.lng”: “TypeError: Cannot read properties of undefined (reading ‘setPosition’)” 解释 回调观察程序“content”时出错:“TypeError:无法读取未定义的属性(读取’setContent’)”…

一文掌握:B端系统表单页的作用、组件、设计要点,另附大量案例

Hi,我是贝格前端工场,本篇分享表单页该如何设计,读罢此文让你对表单页有全方位的认识,欢迎点赞评论转发,有需求请私信我们。 一、表单页是什么 表单页是指在Web应用程序中用于收集和提交用户输入数据的页面。它通常由…

基于J2EE的在线考试系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 Java简介 3 1.2 JSP技术 3 1.3 MySQL数据库 4 1.4 B/S结构 4 1.5 本章小结 4 2 系统分析 5 2.1 需求分析 5 2.2 可行性分析 6 2.2.1 技术可行性 6 2.2.2 操作可行性 6 2.2.3 经济可行性 7 2.2.4 法律可行性 7 2.3 系统性能…

邓保康 App 技术支持

邓保康APP功能简介: 这是一款创新,稳定的商业购物型平台app,涵盖同城门店,便捷团购等业务需求。 如果使用过程中有任何疑问可以在帖子中提问,我们会第一时间进行答复和处理。 获得支持: 邮件&#xff1a…

kettle入门一 安装与基本使用

一、kettle概述 1、什么是kettle Kettle是一款开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。 2、Kettle工程存储方式 (1)以XML形式存储 (2&…

Axure基础 各元件的作用及介绍

图像热区 增加按钮或者文本的点击区域,他是透明的,在预览时看不见。 动态面板 用来绘制一下带交互效果的元件,他是动态的,如轮播图,一个动态面板里可以有多个子面板,每一个子面板对应着不同的效果。 他…

像SpringBoot一样使用Flask - 4.拦截器

接上文《像SpringBoot一样使用Flask - 3.蓝图路由Blueprint》,我们已经整理了一个干净的"启动类",现在要加入一些拦截器,为了方便统一管理。 一、常用的拦截器 # 拦截器 app.before_request def handle_before_request():"&qu…

文献阅读:DEA-Net:基于细节增强卷积和内容引导注意的单图像去雾

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读:DEA-Net:基于细节增强卷积和内容引导注意的单图像去雾1、研究背景2、方法提出3、相关知识3.1、DEConv3.3、多重卷积的…

Consul(安装,服务注册与发现,服务配置与动态刷新,配置持久化)

1.下载安装Consul 下载地址:Install | Consul | HashiCorp Developer 解压后只有一个.exe文件,运行后在该文件路径下输入consul --version 启动consul开发模式:consul agent -dev 访问localhost:8500进去consul主页 2.服务注册与发现 官方配置手册:Quick Start :…

进程控制(二) 进程等待与进程替换

目录 一、进程等待 理解进程等待 演示进程等待 获取进程的status 进程等待接口讲解 wait用法​ waitpid用法 等待多进程 基于非阻塞调用的轮询式检测 二、进程程序替换 excel接口 程序替换演示 单进程程序替换 多进程程序替换 程序替换原理 单进程程序替换 多…

Web Worker:JavaScript的后台任务解决方案

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

阿里云服务器ECS u1实例2核4G5M带宽优惠价199元/年性能测评

阿里云服务器ECS u1实例,2核4G,5M固定带宽,80G ESSD Entry盘优惠价格199元一年,性能很不错,CPU采用Intel Xeon Platinum可扩展处理器,购买限制条件为企业客户专享,实名认证信息是企业用户即可&a…

每日OJ题_牛客HJ60 查找组成一个偶数最接近的两个素数

目录 牛客HJ60 查找组成一个偶数最接近的两个素数 解析代码 牛客HJ60 查找组成一个偶数最接近的两个素数 查找组成一个偶数最接近的两个素数_牛客题霸_牛客网 解析代码 #include <cmath> #include <iostream> using namespace std; bool isPrime(int n) {for (…

STM32H750片外QSPI启动配置简要

STM32H750片外QSPI启动配置简要 &#x1f4cd;参考信息源&#xff1a;《STM32H750片外Flash启动(W25Q64JVSIQ)》&#x1f516;本例程基于Keil MDk开发平台。&#x1f341;配置框架&#xff1a; ✨为什么使用要使用QSPI启动方式 不管对于STM32H7系列单片机&#xff0c;还是其他…

BC134 蛇形矩阵

一&#xff1a;题目 二&#xff1a;思路分析 2.1 蛇形矩阵含义 首先&#xff0c;这道题我们要根据这个示例&#xff0c;找到蛇形矩阵是怎么移动的 这是&#xff0c;我们可以标记一下每次移动到方向 我们根据上图可以看出&#xff0c;蛇形矩阵一共有两种方向&#xff0c;橙色…

解决ChatGPT发送消息没有反应

ChatGPT发消息没反应 今天照常使用ChatGPT来帮忙码代码&#xff0c;结果发现发出去的消息完全没有反应&#xff0c;即不给我处理&#xff0c;也没有抱任何的错误&#xff0c;按浏览器刷新&#xff0c;看起来很正常&#xff0c;可以查看历史对话&#xff0c;但是再次尝试还是一…

一分钟了解遥感中卫星、传感器、波段及数据之间的关系

感是利用卫星、飞机或其他载具上的传感器对地球表面进行观测和测量的科学技术。以下是一些常见的遥感相关术语&#xff1a; 卫星&#xff08;Satellite&#xff09;&#xff1a;在遥感中&#xff0c;卫星是指绕地球轨道运行的人造卫星&#xff0c;其主要任务是携带各种传感器从…

qt+opencv人脸人眼检测识别

项目运行涉及到opencv库&#xff0c;以及haarcascade_frontalface_default.xml和haarcascade_eye_tree_eyeglasses.xml。qt配置opencv可见先前文章&#xff0c;另外这两份OpenCV 中用于眼睛检测的级联分类器xml文件&#xff0c;是我在网上下载的。 把要使用到的文件都放到当前…

指针的学习5

目录 sizeof和strlen的区别 sizeof strlen 数组和指针笔试题解析 一维数组 字符数组 二维数组 指针运算笔试题解析 题目1&#xff1a; 题目2&#xff1a; 题目3&#xff1a; 题目4&#xff1a; 题目5&#xff1a; 题目6&#xff1a; 题目7&#xff1a; sizeof和…

Unity Shader实现UI流光效果

效果&#xff1a; shader Shader "UI/Unlit/Flowlight" {Properties{[PerRendererData] _MainTex("Sprite Texture", 2D) "white" {}_Color("Tint", Color) (1, 1, 1, 1)[MaterialToggle] PixelSnap("Pixel snap", float…