【MySQL学习笔记】关于索引

文章目录

  • 【MySQL学习笔记】关于索引
    • 1.索引数据结构
    • 2.索引存储
    • 3.联合索引
      • 3.1 联合索引的b+树结构
      • 3.2 索引覆盖?回表?
      • 3.3 联合索引最左匹配原则
      • 3.5 索引下推
    • 4.索引失效

【MySQL学习笔记】关于索引

1.索引数据结构

索引是一种能提高查询速度的数据结构。

1、索引结构/索引类型:

按数据结构分类:B+树索引、Hash索引、全文索引。

按物理存储分类:聚簇索引、二级索引。

按字段特性分类:主键索引、唯一索引、普通索引、前缀索引。

按字段个数分类:单列索引、联合索引。

2、InnoDB的索引数据结构是什么?(InnoDB是支持B+树和FULLTEXT索引的)

我所了解的是B+树索引,在数据组织形式上,B+树的非叶子节点只存放索引和指向子节点的指针,叶子节点存储索引和行数据。并且所有叶子节点都是通过指针相连,形成一个双向链表,支持快速的顺序访问和范围查询。树的高度平衡,稳定性好。

2.索引存储

堆表和索引组织表有什么区别?分别应用场景是什么?

[图片]

堆表是 MyISAM 使用的存储方式,索引组织表是 InnoDB 使用的存储方式。

堆表的数据是无序存放的,无需维护索引与数据的一致性,因此插入性能较好。同时,堆表的索引是非聚簇索引,所有索引是平级的,索引查询性能较高,通常一次可以定位到结果。但堆表仅支持表锁,在高并发场景下性能较差,适用于低并发、以读为主的场景。

索引组织表的数据按照主键顺序存储,主键索引即为数据本身,并支持行锁,因此在高并发场景下性能远高于堆表,特别适用于频繁的增删改操作。但由于需要维护索引顺序和数据一致性,其插入性能相对较低,尤其是当表的主键频繁变化或数据碎片较多时。

3.联合索引

3.1 联合索引的b+树结构

推荐这篇文章:联合索引在B+树上的存储结构及数据查找方式上一篇文章《MySQL索引那些事》主要讲了MySQL索引的底层原理,且对比了B - 掘金
引用文章里面的这个图:
[图片]

InnoDB会使用主键索引在B+树维护索引和数据文件,创建的联合索引也会生成一个索引树,同样都是B+树的结构,只不过它的data部分存储的是联合索引所在行的值。
对于这个联合索引,排序规则就是根据定义索引的顺序,(b,c,d),先根据b排序,若b相同,再根据c排序,依次类推。

3.2 索引覆盖?回表?

创建联合索引之后,进行查询时索引覆盖还是回表,主要是看SELECT的列。

就还是要上面的例子,进行查询。

select * from table_name where b = 12 and c = 14 and d = 3;

这个查询的是数据全部,所以需要回表,为什么呢?

这个还是基于联合索引的特性,它会创建一个新的B+树,但是这个树的叶子节点只有联合索引的参数,如果你查询的不是其中的列,那么就会根据这个查询到的主键id回表查询。

如果你查询的列就是其中一个,那么就不需要回表查询了,直接返回这个数据就行,这就是索引覆盖。

所以说,联合索引的优势在于支持索引覆盖查询,避免回表操作,并且对索引列的查询可直接利用索引的有序性完成排序,无需额外的外部排序,显著提升查询性能。

3.3 联合索引最左匹配原则

  1. MySQL会从联合索引最左边的索引开始匹配查询条件,从左到右匹配,如果查询条件没有使用到某个列,那么该列右边的列全部失效。
  2. 当查询条件使用了某个列,但是该列的值包含范围查询,范围查询的字段可以用到联合索引,但是范围查询字段后面的字段无法用到联合索引。

3.5 索引下推

索引下推是MySQL5.6的优化机制,默认是开启的,如果条件判断字段,在二级索引B+树里,就会下推到InnoDB存储引擎层来过滤,过滤完的记录,才会回表,相比没有索引下推的时候,可以减少回表次数。

Where a>100 and b=100 and c=200 order by d 怎么建立联合索引?

(bcda),bc走索引,d利用了索引有序性,避免file sort,a不能走索引,走索引下推。

4.索引失效

索引失效有哪些?

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

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

相关文章

D104【python 接口自动化学习】- pytest进阶参数化用法

day104 pytest参数化parametrize单参数 学习日期:20241223 学习目标:pytest基础用法 -- pytest参数化parametrize单参数 学习笔记: 参数化 parametrize 参数化可以组装测试数据,在测试前定义好测试数据,并在测试用…

第T4周:TensorFlow实现猴痘识别(Tensorboard的使用)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目标: 1、学习tensorboard的使用 具体实现: (一)环境: 语言环境:Python 3.10 编 译 器…

Docker-构建自己的Web-Linux系统-镜像webtop:ubuntu-kde

介绍 安装自己的linux-server,可以作为学习使用,web方式访问,基于ubuntu构建开源项目 https://github.com/linuxserver/docker-webtop安装 docker run -d -p 1336:3000 -e PASSWORD123456 --name webtop lscr.io/linuxserver/webtop:ubuntu-kde登录 …

小米路由器开启SSH,配置阿里云ddns,开启外网访问SSH和WEB管理界面

文章目录 前言一、开启SSH二、配置阿里云ddns1.准备工作2.创建ddns脚本3.添加定时任务 三、开启外网访问SSH和WEB管理界面1、解除WEB管理页面访问限制2.手动添加防火墙端口转发规则,开启外网访问WEB管理和SSH 前言 例如:随着人工智能的不断发展&#xf…

什么是ESC ---- 防止车辆打滑并提高驾驶时稳定性的技术

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源&…

LinkedList类 (链表)

目录 一. LinkedList 基本介绍 二. LinkedList 中的法及其应用 1. 添加元素 (1) add() (2) addAll() (3) addFirst() (4) addLast() 2. 删除元素 (1) remove() (2) removeAll() (3) removeFirst() (4) removeLast() 3. 遍历元素 (1) for 循环遍历 (2) for - each …

复习打卡大数据篇——Hadoop MapReduce

目录 1. MapReduce基本介绍 2. MapReduce原理 1. MapReduce基本介绍 什么是MapReduce MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上。 MapRed…

Java基础知识(四) -- 面向对象(下)

1.类变量和类方法 1.1 类变量背景 有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有多少人在玩? 思路分析: 核心在于如何让变量count被所有对象共享 public class Child {private String name;// 定义静态变量(所有Child对象共享)public static int count 0;p…

SpringBoot中使用TraceId进行日志追踪

**查询日志的痛点:**项目中每当我们查询日志的时候都是看前端请求什么接口,根据一些关键字进入服务器查询日志中是否有这个关键字,然而这个关键字在日志里面并不是唯一的,所以要生成一个唯一的标识,每一次请求都是唯一…

C++类与对象上

1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题 例如洗衣服: C是基于面向对象的,关注的是对象,讲一件事拆分成不同的对象,靠对…

向量组学习

向量组的秩及其线性组合 线性相关性 先看a1,a2 如果这两个向量不对应成比例的话,那必然内部不可能存在多余的向量,也就是无关. 主元所在的列都是独立向量 ,最大无关组就是b1,b2,b4,但这个是初等行变换后的,题目要的是A的,与之对应的就是a1,a2,a4 方程组解的结构

使用VS Code开发ThinkPHP项目

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《ThinkPHP 8高效构建Web应用 夏磊 编程与应用开发丛书 清华大学出版社》【摘要 书评 试读】- 京东图书 ThinkPHP 8开发环境安装-CSDN博客 安装ThinkPHP项目的IDE 常用的集成开发环境(IDE)包括P…

软件耦合类型及相关说明

文字叙述太麻烦了,此内容个人觉得上图可能大家更容易接受。 ——话不多说,直接上图。

TestMAX/DFT Compiler:时序单元的类型、连接顺序和后DFT优化

相关阅读 TestMAX/DFT Compilerhttps://blog.csdn.net/weixin_45791458/category_12865937.html?spm1001.2014.3001.5482 时序单元的状态 未映射的时序单元(Unmapped Sequential Cell) 在Design Compiler读取了一个RTL设计后,Design Compiler内置的HDL Compiler工…

8086汇编(16位汇编)学习笔记06.串操作、流程转移指令

8086汇编(16位汇编)学习笔记06.串操作、流程转移指令-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 串操作 源操作数使用si,默认段为DS,可段超越 目的操作数使用di,默认段为ES,不可段超越 串方向 串方向由D…

TCP off-path exploits(又一个弄巧成拙的例子)

承接前面几篇文章的观点,本文用一个安全攻击的例子说明为了解决一个伤害很低的低概率问题,会引入多么大的麻烦,这次是可怕的被攻击 (⊙o⊙)。 TCP 端口号只有 16bit,序列号只有 32bit,这意味着在强大攻击算力面前&…

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

本篇文章将介绍一个新的改进机制——SMFA(自调制特征聚合模块),并阐述如何将其应用于YOLOv11中,显著提升模型性能。随着深度学习在计算机视觉中的不断进展,目标检测任务也在快速发展。YOLO系列模型(You Onl…

大表:适用于结构化数据的分布式存储系统

大家觉得有意义和帮助记得及时关注和点赞!!! 译者序摘要1 引言2 数据模型 2.1 行(Row)2.2 Column Families(列族) 2.2.1 设计2.2.2 column key 的格式:family:qualifier2.2.3 访问控制和磁盘/内存记账(acco…

【AIGC-ChatGPT副业提示词指令 - 动图】魔法咖啡馆:一个融合创意与治愈的互动体验设计

引言 在当今快节奏的生活中,咖啡早已不仅仅是提神醒脑的饮品,更成为了一种情感寄托和生活态度的表达。本文将介绍一个独特的"魔法咖啡馆"互动体验设计,通过将咖啡与情感、魔法元素相结合,创造出一个充满想象力和治愈感…

xterm遇到的问题及解决方案

xterm遇到的问题及解决方案 /r插入终端导致的之后插入的数据覆盖了改行头部的数据 问题说明 如图所示,当在一行输入的候,输入的l插入到了改行的头部。 查看ws返回数据 可见ws返回的信息存在\r字符,在xterm.js中\r是回车字符的意思&…