【从删库到跑路】MySQL数据库的索引(一)——索引的结构(BTree B+Tree Hash),语法等

🎊专栏【MySQL】
🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。
🎆音乐分享【如愿】
🥰欢迎并且感谢大家指出小吉的问题

文章目录

  • 🍔概述
  • 🍔索引结构
  • ⭐B-Tree多路平衡查找树
    • 🏳️‍🌈构建过程
  • ⭐B+Tree
    • 🏳️‍🌈构建过程
  • ⭐Hash
    • 🏳️‍🌈构建过程
    • 🎈Hash索引特点
  • 🍔索引分类
    • 🏳️‍🌈执行过程
  • 🍔语法
    • 🎈查看索引
    • 🎈创建索引
      • 🎈创建联合索引
    • 🎈删除索引
  • 🍔SQL性能分析
    • ⭐查询命令的执行频率
    • ⭐慢查询日志
      • 🎈查询MySQL慢查询日志查询是否打开
      • 🎈开启MySQL慢查询日志查询开关
      • 🎈设置慢日志的时间为2秒
    • ⭐profile详情
      • 🎈查看当前MySQL是否支持profile操作
      • 🎈开启profiling
      • 🎈查看会话执行的所有的SQL语句的耗时时间
      • 🎈查看指定Query_ID的SQL语句在`各个阶段`的耗时时间
      • 🎈查看指定Query_ID的SQL语句在`各个阶段`的`CPU的`耗时时间
    • ⭐explain执行计划
      • 🎈explain执行计划各个字段的作用

在这里插入图片描述

🍔概述

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

优点缺点
提高数据检索的效率,降低数据库的IO成本索引也要占空间
通过索引对数据进行排序,降低数据排序的成本,降低CPU的消耗索引大大提高了查询效率,同时却降低更新表的速度(比如降低进行insert,update,delete操作的效率)

🍔索引结构

MySQL的索引是在存储引擎层实现的,具体分为以下几种结构
在这里插入图片描述
我们平时说的索引,如果没有特殊指明,说的都是B+树组织结构的索引
在这里插入图片描述

⭐B-Tree多路平衡查找树

下面是一颗最大度数为5的B-Tree例子
在这里插入图片描述

🏳️‍🌈构建过程

请看视频讲解
第6.30分钟开始

⭐B+Tree

数据都存放在叶子节点中
叶子节点形成一个单向链表

在这里插入图片描述

🏳️‍🌈构建过程

请看视频讲解
第1.50分钟开始

⭐Hash

哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位中,然后存储到hash表中
如果两个(或多个)键值,映射到同一个槽位中,就产生了hash冲突,可以通过链表来解决

🏳️‍🌈构建过程

请看视频讲解
第20秒开始

🎈Hash索引特点

  • Hash索引只能用于对等比较(=,in),不支持范围查询(between,>,<,……)
  • 无法利用索引完成排序操作
  • 查询效率高,通常仅需要一次检索就可以了,效率往往比B+Tree高

在MySQL中,支持hash索引的是Memory引擎,而InnoDB中具有自适应hash功能
hash索引是存储引擎根据B+Tree索引在指定条件下自动构建的

🍔索引分类

在这里插入图片描述
仅主键索引只能有一个,其他索引可以有多个
🍔在InnoDB存储引擎中,根据索引的存储形式,又可以分为以下两种

分类含义特点
聚集索引数据和索引放到了一起,索引结构的叶子节点保存了行数据必须有,而且只能有一个
二级索引数据和索引分开存储,索引结构的叶子节点关联的是对应的主键可以存在多个

在这里插入图片描述

🏳️‍🌈执行过程

请看视频讲解
第5.00分钟开始

🍔语法

🎈查看索引

show index from 表名;

在这里插入图片描述

🎈创建索引

create [unique|fulltext] index 索引名 on 表名 (字段名);

在这里插入图片描述

🎈创建联合索引

create [unique|fulltext] index 索引名 on 表名 (字段名1,字段名2,字段名3...);

在联合索引中,字段的顺序是有讲究的
一般是使用最频繁的字段放到左侧

🎈删除索引

drop index 索引名 on 表名;

🍔SQL性能分析

⭐查询命令的执行频率

show global status like 'Com___';

当前数据库有多少个表,Com后面就有多少个 _

⭐慢查询日志

慢查询日志(Slow Query Log)是一种数据库日志,用于记录执行时间超过预设阈值的慢查询语句。慢查询通常指执行时间较长的SQL查询语句,可能会对数据库性能产生影响。

慢查询日志的主要作用是帮助识别和优化执行时间较长的查询语句。通过启用慢查询日志并设置阈值,数据库系统可以自动将执行时间超过阈值的查询语句记录到慢查询日志中。

通过分析慢查询日志,可以发现潜在的性能问题和优化机会。例如,可以识别出执行时间较长的查询语句,进而对其进行优化,如优化查询语句的结构、添加索引或重新设计数据库模式等。

🎈查询MySQL慢查询日志查询是否打开

show variables like 'slow_query_log';

🎈开启MySQL慢查询日志查询开关

slow_query_log=1;

🎈设置慢日志的时间为2秒

SQL语句执行时间超过2秒,就被认为是慢查询,记录到慢查询日志中

long_query_time=2;

⭐profile详情

有些SQL命令比较简单,但是执行时间接近慢日志设置的时间,这样子的SQL也是性能比较低的
(比如设置慢日志时间为2秒,但是有些简单的SQL命令到了1.9 1.8秒)
此时就要使用profile详情

🎈查看当前MySQL是否支持profile操作

select @@have_profiling;

在这里插入图片描述
如果显示的是NO,我们可以开启profiling

🎈开启profiling

set profiling=1;

🎈查看会话执行的所有的SQL语句的耗时时间

show profiles;

在这里插入图片描述

🎈查看指定Query_ID的SQL语句在各个阶段的耗时时间

在哪里看Query_ID
在这里插入图片描述

show profile for query Query_ID;

注意查询的是各个阶段的耗时
在这里插入图片描述

🎈查看指定Query_ID的SQL语句在各个阶段CPU的耗时时间

show profile cpu for query Query_ID;

⭐explain执行计划

使用explain或desc命令获取MySQL执行select语句的信息,包括在select语句执行过程中表如何连接和连接的顺序

使用时可以在任意select语句前面加上explain或者desc

explain select 字段列表 from 表名 where 条件;

在这里插入图片描述

🎈explain执行计划各个字段的作用

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

🥰如果大家有不明白的地方,或者文章有问题,欢迎大家在评论区讨论,指正🥰

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端技术Vue学习笔记--001

前端技术Vue学习笔记 文章目录 前端技术Vue学习笔记1、Vue2和Vue3比较2、Vue简介3、Vue快速上手4、插值表达式{{}}5、Vue响应式特性6、Vue指令6.1、v-html指令6.2、v-show指令和v-if指令6.3、v-else指令和v-else-if指令6.4、v-on指令6.4.1、v-on指令基础6.4.2、v-on调用传参 6.…

win10电脑便签常驻桌面怎么设置?

你是否曾经因为繁忙的工作而忘记了一些重要的事项&#xff1f;相信很多人都会回答&#xff1a;忘记过&#xff01;其实在快节奏的职场中&#xff0c;我们经常需要记录一些重要的信息&#xff0c;例如会议时间、约见客户时间、今天需要完成的工作任务等。而为了能够方便地记录和…

阿里云安装宝塔面板

阿里云安装宝塔面板 1.安装步骤2.需要加入安全组&#xff0c;打开端口3.安装宝塔 1.安装步骤 1.这里主要以阿里云的服务器 ECS为例子,需要安装纯净的系统 创建过程: 这边先用的是免费的: 2.需要加入安全组&#xff0c;打开端口 进入实例选项卡&#xff1a; 快速添加&…

低代码平台协同OA升级,促进金融企业信息化建设

编者按&#xff1a;数字化办公是信息化时代每个企业不可避免的&#xff0c;OA系统是数字化办公的关键环节。如何与时俱进&#xff0c;保持企业的活力&#xff0c;增强企业综合竞争力&#xff1f;本文分析了企业OA系统为什么需要升级&#xff0c;并进一步指出如何实现升级。 关…

Linux环境下Elasticsearch相关软件安装

Linux环境下Elasticsearch相关软件安装 本文将介绍在linux(Centos7)环境下安装Elasticsearch相关的软件。 1、安装Elasticsearch 1.1 Elasticsearch下载 首先去Elasticsearch官网下载相应版本的安装包&#xff0c;下载之后传输到linux服务器上。 官网地址&#xff1a;http…

在自定义数据集上微调Alpaca和LLaMA

本文将介绍使用LoRa在本地机器上微调Alpaca和LLaMA&#xff0c;我们将介绍在特定数据集上对Alpaca LoRa进行微调的整个过程&#xff0c;本文将涵盖数据处理、模型训练和使用流行的自然语言处理库(如Transformers和hugs Face)进行评估。此外还将介绍如何使用grado应用程序部署和…

STM32MP157驱动开发——LED驱动(设备树)

文章目录 设备树驱动模型如何使用设备树写驱动程序设备树节点要与 platform_driver 能匹配设备树节点指定资源&#xff0c;platform_driver 获得资源 LED 模板驱动程序的改造&#xff1a;设备树驱动模型修改设备树&#xff0c;添加 led 设备节点修改 platform_driver 的源码编译…

设计模式再探——状态模式

目录 一、背景介绍二、思路&方案三、过程1.状态模式简介2.状态模式的类图3.状态模式代码4.状态模式还可以优化的地方5.状态模式的项目实战&#xff0c;优化后 四、总结五、升华 一、背景介绍 最近产品中有这样的业务需求&#xff0c;不同时间(这里不是活动的执行时间&…

前端学习——Vue (Day1)

Vue 快速上手 Vue 是什么 创建 Vue 实例 Vue2官网&#xff1a;https://v2.cn.vuejs.org/ <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge…

基于单片机的语音识别智能垃圾桶垃圾分类的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;液晶显示当前信息和状态&#xff1b;通过语音识别模块对当前垃圾种类进行语音识别&#xff1b; 通过蜂鸣器进行声光报警提醒垃圾桶已满&#xff1b;采用舵机控制垃圾桶打开关闭&#xff1b;超声波检测当前垃圾桶满溢程度&#xff1…

【目标跟踪】2、FairMOT | 平衡多目标跟踪中的目标检测和 Re-ID 任务 | IJCV2021

文章目录 一、背景二、方法2.1 Backbone2.2 检测分支2.3 Re-ID 分支2.4 训练 FairMOT2.5 Online Inference 三、效果3.1 数据集3.2 实现细节3.3 消融实验3.4 最终效果 论文&#xff1a;FairMOT: On the Fairness of Detection and Re-Identification in Multiple Object Tracki…

大模型开发(十):Chat Completion Models API 详解

全文共8000余字&#xff0c;预计阅读时间约18~28分钟 | 满满干货(附代码案例)&#xff0c;建议收藏&#xff01; 本文目标&#xff1a;详解Chat Completion Models的参数及应用实例&#xff0c;并基于该API实现一个本地知识库的多轮对话智能助理 代码&文件下载点这里 一、…

【前端|CSS系列第4篇】CSS布局之网格布局

前言 最近在做的一个项目前台首页有一个展示词条的功能&#xff0c;每一个词条都以一个固定大小的词条卡片进行展示&#xff0c;要将所有的词条卡片展示出来&#xff0c;大概是下面这种布局 每一行的卡片数目会随着屏幕大小自动变化&#xff0c;并且希望整个卡片区域周围不要…

ChatGPT 4.0 —— Code Interpreter

&#x1f4ce;产品销售数据集.csv 选取以上的数据集作为输入&#xff0c;对Code Interpreter 进行测试 1.输入指定数据集&#xff0c;要求给出该数据集的概貌 2.请分析销售的总金额和其他变量的关系 Python Script: # Import required libraries import matplotlib.pyplot a…

java项目之网络视频播放器(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的网络视频播放器。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&a…

vs2015 工程组织与动态加载

10.Visual Studio动态加载_哔哩哔哩_bilibili 1.工程组织 ① researcher.cpp #include "nn/nn.h"#include "nn/factory.h" #include "nn/factory_impl/factory_impl.h"#include <iostream>int main() {int ret 0;factory_i* fct new f…

Java实现获取客户端真实IP方法小结

Java实现获取客户端真实IP方法小结 在jsP里&#xff0c;获取客户端的IP地址的方法是&#xff1a;request.getRemoteAddr()&#xff0c;这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件&am…

【数据挖掘】bytewax 与 ydata工具可实时了解您的数据

一、说明 在这篇博文中&#xff0c;我们将介绍如何将开源流式处理解决方案 bytewax 与 ydata 分析相结合并加以利用&#xff0c;以提高流式处理流的质量。 STream 处理支持在传输中和存储之前对数据进行实时分析&#xff0c;并且可以是有状态的&#xff0c;也可以是无状态的。 …

双向循环链表的基本操作(创建节点,头插,头删,尾插,尾删)

头定义&#xff1a; typedef char datatype[20];//datatypechar[20] typedef struct Node {//数据域 数据元素datatype data;//指针域 下一个节点地址struct Node* next;//指针域 上一个节点地址struct Node* prev; }*DoubleLink; 创建链表节点&#xff1a; DoubleLink crea…

轻量级Web报表工具ActiveReportsJS全新发布v4.0,支持集成更多前端框架!

ActiveReportsJS 是一款基于 JavaScript 和 HTML5 的轻量级Web报表工具&#xff0c;采用拖拽式设计模式&#xff0c;不需任何服务器和组件支持&#xff0c;即可在 Mac、Linux 和 Windows 操作系统中&#xff0c;设计多种类型的报表。ActiveReportsJS 同时提供跨平台报表设计、纯…