MYSQL系列之 索引的概念

【MySQL系列】MySQL索引事务 MySQL数据库 索引和事务部分的内容~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 阅读详情
索引的常见模型:

1、哈希表,以key-value存储的数据结构。同样的哈希用链表存储(类hashmap)
优点: 插入很快
缺点: 链表非有序查询会很慢。范围查询遍历整个数据库
2、有序数组,
优点:等值查询(二分)、范围查询性能非常优秀
缺点:二叉搜索树维持有序需要log(N)、大量数据会访问多个数据块,访问会变慢
3、 InnoDB索引模型(B+): 每一个索引在InnoDB中,对应一颗B+树

索引存储结构
create table T(    
    id int primary key,    
    k int not null,    
    name varchar(16),     
    index (k)
)engine=InnoDB;

在这里插入图片描述

表中 R1~R5 的 (ID,k) 值分别为 (100,1)、(200,2)、(300,3)、(500,5) 和 (600,6),两棵树的示例示意图

索引分类:

主键索引(聚簇索引): 主键索引叶子节点存储整行数据
非主键索引(二级索引): 叶子节点存储的内容是主键的值

索引的区别:

如果语句是 select * from T where ID=500,即主键查询方式,则只需要搜索 ID 这棵 B+ 树;
如果语句是 select * from T where k=5,即普通索引查询方式,则需要先搜索 k 索引树,得到 ID 的值为 500,再到 ID 索引树搜索一次。这个过程称为回表。

索引的维护:

一个数据页满了,按照B+Tree算法,新增加一个数据页,叫做页分裂,会导致性能下降。空间利用率降低大概50%。当相邻的两个数据页利用率很低的时候会做数据页合并,合并的过程是分裂过程的逆过程。
自增主键的必要性: 每次插入一条新记录,都是追加操作,都不涉及到挪动其他记录,也不会触发叶子节点的分裂

案例:
create table T (
ID int primary key,
k int NOT NULL DEFAULT 0, 
s varchar(16) NOT NULL DEFAULT '',
index k(k)
)engine=InnoDB;
insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee')(600,6,'ff'),(700,7,'gg');

在这里插入图片描述

一条范围查询SQL执行几次搜索树: select * from T where k between 3 and 5

1、在 k 索引树上找到 k=3 的记录,取得 ID = 300;
2、再到 ID 索引树查到 ID=300 对应的 R3;
3、在 k 索引树取下一个值 k=5,取得 ID=500;
4、再回到 ID 索引树查到 ID=500 对应的 R4;
5、在 k 索引树取下一个值 k=6,不满足条件,循环结束。

回到主键索引树搜索的过程,我们称为回表。可以看到,这个查询过程读了 k 索引树的 3 条记录(步骤 1、3 和 5),回表了两次(步骤 2 和 4)

覆盖索引(联合索引防止回表查询)

如果执行的语句是 select ID from T where k between 3 and 5,这时只需要查 ID 的值,而 ID 的值已经在 k 索引树上了,因此可以直接提供查询结果,不需要回表。也就是说,在这个查询里面,索引 k 已经“覆盖了”我们的查询需求,我们称为覆盖索引。

最左前缀原则

在这里插入图片描述
建立联合索引姓名和年龄时,会根据顺序创建B+树,如图,如果所以只查年龄是无法使用索引的

索引下推

索引找到第一个符合的值时,MySQL5.6之前,找到第一个符合的值后,会一个一个值回表查询,MySQL 5.6之后,会先对索引做判断,直接过滤掉不满足的记录,减少回表的次数。如图:
在这里插入图片描述
在这里插入图片描述

MySQL系列-优化之覆盖索引 1.什么是覆盖索引 我们知道MySQL的B+Tree索引是用我们字段的数据来建立索引的,比如说我们的主键id字段,就是用所有的id来组织这颗索引树,如果我们再对name字段建立索引的话,这个二级索引就是用name字段的数据来组织这颗索引树。那么问题就来了,我们知道对于二级索引而言他的叶子节点存储了对应数据行的id(MySQL系列-B+Tree索引详解),也就是说最后我们的查询还是要通过主键id来... 阅读详情

相关推荐

MySQL 面试系列:MySQL 索引的面试题总结

索引是一种能帮助 MySQL 提高查询效率的数据结构。最左匹配原则也叫最左前缀原则,是 MySQL 中的一个重要原则,说的是索引以最左边的为起点任何连续的索引都能匹配上,当遇到范围查询(>、

pingguocu3的博客 1054

MySQL数据库(8)—索引(概念+理解+操作)

摘要:索引是提高数据库查询性能的重要技术,通过创建适当的数据结构(如B+树)来加速数据检索。索引以空间换时间,查询速度可提升数百倍,但会降低增删改操作的效率。常见的索引类型包括主键索引、唯一索引、普通索引和全文索引。MySQL与磁盘交互的基本单位是16KB的Page,通过BufferPool管理内存中的数据。InnoDB采用聚簇索引(数据与索引共存),而MyISAM采用非聚簇索引(数据与索引分离)。创建索引应遵循查询频繁、唯一性适中等原则,并可通过多种SQL语句进行创建、查询和删除操作。

2401_87986548的博客 854

【MySql系列】深入解析数据库索引

在数据库中,索引是一种数据结构,用于快速查找表中的数据。索引包含表中一列或多列的值,这些值按照一定的顺序进行排序,以便优化数据的检索速度。通过使用索引,数据库可以避免全表扫描,从而提高查询性能。

颜淡慕潇 5万+

MySQL 索引

MySQL 索引 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。 一、索引概述 1.1、什么是索引 索引是用于快速找出在某个列中拥有特定值的行。 如果没有索引,MySQL必须从第一条记录开始读完整个表...

qq_52804302的博客 209

【MySQL 系列】MySQL 索引篇

在 MySQL 中,索引是一种帮助存储引擎快速获取数据的数据结构,形象的说就是索引是数据的目录。它一般是以包含索引键值和一个指向索引键值对应数据记录物理地址的指针的节点的集合的清单的形式存在。

栗筝i的博客 4302

【解决问题】‘vue‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

【解决问题】'vue' 不是内部或外部命令,也不是可运行的程序或批处理文件。

weixin_44566194的博客 4万+

MySQL:索引

MySQL:关于索引

AI_BING_的博客 1442

单细胞轨迹分析实战:基于Monocle和CytoTRACE的细胞分化潜能与状态解析

本文提供了基于Monocle和CytoTRACE的单细胞轨迹分析实战指南。通过乳腺癌数据集,详细演示了从数据准备、伪时序分析、细胞分化潜能评估到分支点功能挖掘的全流程。结合两种工具的优势,能有效解析细胞状态动态演变,为发育和疾病研究提供关键见解。

weixin_29070861的博客 478

Mysql数据库(四)MySQL索引

MySQL索引——Mysql数据库1、索引的概念2、索引的作用和缺点①、作用②、缺点3、创建索引的原则(优化)4、索引的分类和创建Ⅰ、普通索引5、6、 1、索引的概念 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址) 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度 索引就好比是一本书的目录,可以根据目录中的页码快速找到所需的内容 索引是

weixin_53496478的博客 284

自由曲面与衍射光学元件DOE:从基础理论到工业应用的全景解析

本文全景解析了自由曲面与衍射光学元件的核心理论与工业应用。文章深入探讨了自由曲面在非对称光学设计中的灵活性及其数学描述与制造挑战,并阐述了衍射光学元件通过微纳结构进行波前相位调制的原理与多样化功能。两者与经典光学互补融合,共同构成了高端成像、智能照明、激光加工及AR/VR等前沿领域的底层技术支柱。

devops8pract的博客 390

【YOLO26创新改进】TGRS 2026 | Transformer变体改进篇 | 使用CGTA曲率引导令牌注意力,改善结构与纹理的整体协调,适合遥感小目标检测、旋转目标检测、实例分割任务

本文在YOLO26目标检测模型中引入CGTA曲率引导令牌注意力模块,依据曲率显著性与特征可靠性,从高分辨率特征图中筛选少量关键令牌,再让全部位置与这些代表性特征进行全局交互,从而以较低计算和显存开销建立远距离目标、背景及跨尺度结构之间的联系;该模块能够重点强化车辆、舰船、飞机、建筑等目标的边缘、转角和弯曲轮廓,改善小目标、密集目标及旋转目标的特征完整性与定位稳定性,并通过可靠性门控抑制噪声和伪边缘,通过标准注意力与曲率注意力融合避免平坦区域被过度增强。

AI魔改博士-中大博士 46

Mysql索引详解(图文并茂)

索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。想要学习好索引,那么就一定要掌握mysql的数据结构,其实在一提到数据结构,对于基础较差的来说,有时候是非常头疼的,不过在这里大家完全不用担心,接下来也会重点讲解数据结构,尽量会以白话文的形式叙述每一个数据结构!!!...

怪咖@的博客 4379

AI应用质量工程实践:从评估到监控的完整体系构建

在软件工程领域,质量保障体系是确保产品稳定可靠的核心机制,涉及度量指标、保障流程和工具链的完整闭环。随着生成式AI应用的快速发展,如何将传统软件工程中的质量门禁思想引入AI领域,成为工程实践的关键挑战。其核心原理在于构建可量化、可监控、可改进的质量评估框架,通过自动化测试、持续监控和反馈优化来管理AI输出的不确定性。这一技术价值在于将AI应用从原型阶段推向产品化,确保输出的一致性、安全性和可靠性。在实际应用场景中,开发者需要从功能性、非功能性、一致性和合规性四个维度构建评估体系,并借助LLM-as-a-Ju

weixin_28728279的博客 294

MySQL索引分析以及相关面试题

可以在我的个人博客阅读文章,排版会美观一些:文章地址 1. 什么是索引 一种能帮助mysql提高查询效率的数据结构:索引数据结构 索引优点: 大大提高数据查询速度 索引缺点: 维护索引需要耗费数据库资源 索引要占用磁盘空间 当对表的数据进行增删改的时候,因为要维护索引,所以速度收到影响 结合索引的优缺点,得出结论:数据库表并不是索引加的越多越好,而是仅为那些常用的搜索字段建立索引效果才是最佳的! 2. 索引的分类 主键索引:PRIMARY KEY 设定为逐渐后,数据库自动建立索引,i.

兴趣使然的草帽路飞 2万+

QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP)

一、环境介绍 QT版本: 5.12.6 编译环境: win10 64位 目标系统: Android 完整工程源码下载地址(包含APK文件):https://download.youkuaiyun.com/download/xiaolong1126626497/19051696 二、功能介绍 本软件是一款BLE蓝牙串口调试助手,支持常规的发送和接收调试,BLE是低功耗类型蓝牙,在智能家居、物联网领域使用较多。BLE低功耗蓝牙一般不能直接使用手机进行连接,手机蓝牙默认都是工作在传统蓝牙模式,无法直接连接BL..

7659

UNet改进(54):当医学图像分割遇上频域学习与自监督

本文提出了一种改进U-Net的方法,通过频域增强模块和代理任务模块提升医学图像分割性能。频域增强模块在傅里叶空间对特征图进行可学习的频率调制,重点增强高频细节特征;代理任务模块通过图像重建约束编码器保留关键信息。两个模块协同工作,在仅增加5%参数量的情况下,形成空间域、频域和重建约束三条互补的信息路径。该方法特别适用于需要精细边缘分割的医学图像任务,预期能提升5%-10%的边缘分割精度,在小样本场景效果更显著。部署时可移除代理任务模块,不影响推理效率。未来可探索空间自适应频域调制和更丰富的代理任务设计。

2501_91516851的博客 225

(一)MySQL优化之索引优化

一、索引的概念 我们知道,在查询过程中,如果被查询的表没有索引,数据库会进行全表扫描,而如果添加了相应的索引,数据库会根据索引直接查找符合条件的数据。因此,索引的存在会大大提高查询效率。而索引其实就是一个特殊文件(InnoDB中索引是表空间的一部分),它包含碰上对表中所有记录的引用指针。 二、索引的分类 索引可以分为两种:聚簇索引和非聚簇索引。 (一)聚簇索引 聚簇索引是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数

weixin_44902108的博客 574

国密GmSSL v2版本命令行方式生成国密sm2私钥、公钥、签名和验证签名

GmSSL是国密算法的工具库(主要包含SM2、SM3、SM4和国密SSL证书生成等功能),项目本身是OpenSSL的分支,但是截至文章发布为止,OpenSSL主分支的国密算法并不完善,目前并不支持签名和解签,所以国密算法这块还是需要使用GmSSL工具库。网上现在并没有v2版本的GmSSL可用的命令行文章,本章用于记录这些命令。本文原创自csdn博客,其他网站看到这篇文章都是盗,版,爬。虫。网站,支持原创,远离盗版。

eguid音视频方向博客,分享经过实践检验的硬核音视频技术。FFmpeg、openCV和JavaCV音视频和图像处理系列教程发布十周年,众多开发者的严格验证。欢迎关注,一起交流探索学习最新音视频和图像处理技术 4604

彻底理解MySQL索引

1、什么是索引 索引:排好序的数据结构。Mysql索引的数据结构有Hash表与B+树。Hash索引的局限性是不支持范围查找,因此在实际工作中一般使用B+树索引(B+ Tree的叶子结点存储了相邻结点 )。 2、Mysql两种常见引擎 InnoDB MyISAM 是否使用聚集索引 是。索引文件与数据文件是不分离的,存储在同一文件中。B+树中,叶子节点包含了完整的数据记录。 否。索引文件与数据文件是分离的。B+数中,叶子节点存储的是对应数据的在磁盘中地址。 3、Inn

weixin_43364551的博客 500

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Mysql 索引

mysql数据库索引使用总结归纳

博客只为自己学习提升纪录所用,如有侵权或不妥之处,还请私信删除!加油 331

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

MySQL索引的概念以及七种索引类型介绍

MySQL索引的概念以及七种索引类型介绍。

终生学习践行者 2万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MySQL索引优化系列:(一)索引的类型

MySQL 是最流行的关系型数据库管理系统,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS

菜菜bu菜的博客 1638

MySQL索引系列:全文索引

什么是全文索引? 全文索引首先是 MySQL 的一种索引类型,也是搜索引擎的关键技术。 试想在1M大小的文件中搜索一个词,可能需要几秒,在100M的文件中可能需要几十秒,如果在更大的文件中搜索那么就需要更大的系统开销,这样的开销是不现实的。 所以在这样的矛盾下出现了全文索引技术,有时候有人叫倒排文档技术。 全文索引的作用是什么? 全文索引是将存储在数据库中的大段文本中的任意内容信息查找出来的技术。 既然是查找包含某些内容的文本,用 like + 通配符 或者正则表达式就可以实现模糊匹配,为什么还要全文索引?

@日月空@的博客 1万+

【MySQL系列】索引的学习及理解

索引的学习及理解

枫叶先生的博客 7090

mysql系列:全网最全索引类型汇总

前言 除了常见的普通索引,唯一索引,组合索引,大家还能说一下mysql中有哪些其他类型的索引吗? 今天和大家一起总结mysql中有哪些索引类型。 一、mysql中有哪些索引类型? 聚簇索引 (Clustered Index) 非聚簇索引 主键索引(PRIMARY KEY) 辅助索引(Secondary Indexes) HASH索引 BTREE索引 T-TREE索引 R-Tree索引 自适应hash索引(Adaptive Hash Index) 唯一索引 (UNIQUE Indexs) 普通索引 (No

弹指天下 8458

SQL索引的概念

MySQL索引的概念 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,通俗来讲索引就好比书本的目录,加快数据库的查询速度。 举个简单的例子,见下图: 注意:此例子的中索引结构与数据库中的索引结构差距很大 user表有3个字段(id、name、age),存储8条记录,当我们查找age为20的记录时,sql语句 select * from user ...

人人为我,我为人人 3万+
上一篇: MYSQL系列之 redolog 和 binlog
下一篇: MYSQL系列之 事务
Kindle_code
博客等级 码龄12年 21粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值