MySQL 索引的作用、索引结构及执行流程介绍(索引篇 一)

索引介绍

MySQL索引(index)是一种用于加快数据库中数据搜索和查询的数据结构。它类似于书籍的目录,可以帮助数据库快速定位和访问特定数据,而无需扫描整个数据表。

索引的作用和缺点

1. 加快数据搜索:通过使用索引,数据库可以快速定位到满足查询条件的数据行,提高数据检索的效率,降低数据库的IO成本

2. 提高数据的排序性能:索引可以按照特定的列进行排序,使得排序操作更加高效,降低
数据排序的成本,降低CPU的消耗。

缺点和限制

1. 索引会占用额外的存储空间:索引需要额外的存储空间来存储索引数据结构,这可能会增加数据库的存储需求。

2. 索引会增加数据插入、更新和删除的成本:每次对表进行插入、更新或删除操作时,索引也需要进行相应的维护操作,这可能会降低写操作的性能。

3. 过多或不合理的索引可能会导致性能下降:如果创建了过多的索引或者索引的选择不合理,可能会导致查询性能下降。

四种索引结构

我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引(了解B+树结构:B+树结构)

常见存储引擎的索引

索引(B+树)是如何将select请求优化查询的?

1. 创建索引:首先,我们需要在查询的列上创建B+树索引。通过创建索引,数据库会为该列构建一个B+树数据结构,用于快速定位到满足查询条件的数据行。

2. 解析查询语句:当执行select查询语句时,MySQL会首先对查询语句进行解析,确定查询的条件和需要检索的列。

3. 优化查询计划:接下来,MySQL会根据查询语句和现有的索引信息,优化查询计划。它会分析查询条件和可用的索引,决定如何使用索引来加速查询。优化器会评估不同的索引策略,并选择最佳的索引来执行查询(当前采用B+树)。

4. 定位到索引节点:在执行查询之前,MySQL会使用B+树索引结构进行索引查找。它会从根节点开始,根据查询条件的值与索引节点中的键值进行比较,决定是继续向左子节点还是右子节点查找。

5. 索引遍历:通过不断比较查询条件的值和索引节点中的键值,MySQL会按照B+树的结构逐级遍历索引,直到找到满足查询条件的叶子节点。如果查询条件是一个范围查询,MySQL会遍历索引中的多个节点。

6. 获取数据行:一旦找到满足查询条件的叶子节点,MySQL会从叶子节点中获取对应的数据行的物理位置。它使用这些物理位置信息来访问数据行,并返回给查询结果。

MySQL哪些列(字段)适合创建索引?

1. 经常用于查询的字段

2. 经常用于排序的字段:如果经常需要对某个字段进行排序,如按时间排序或价格排序,为该字段创建索引可以加快排序操作。

3. 经常用于分组的字段:如果经常需要对某个字段进行分组,如按地区分组或按类别分组,为该字段创建索引可以提高分组查询的效率。

4. 大数据范围的字段:对于具有大数据范围的字段,如日期范围或价格范围,为该字段创建索引可以快速定位到符合特定范围的数据。

5. 高选择性的字段:选择性高的字段,即字段值不重复或重复较少,适合创建索引。这样可以提高索引的效果。

6. 统计查询字段:如果需要进行统计查询,如计算平均值或总和,为相关字段创建索引可以加速这类查询。

下一篇:MySQL索引分类、聚集索引、二级索引、覆盖索引

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

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

相关文章

Linux——指令初识

Linux下基本指令 前言一、 ls 指令二、 pwd命令三、cd 指令四、 touch指令五、mkdir指令六、rmdir指令 && rm 指令七、man指令八、cp指令九、mv指令十、cat指令十一、.more指令十二、less指令十三、head指令十四、tail指令总结 前言 linux的学习开始啦! 今…

我的创作纪念日-第1024天

文章目录 一、机缘二、收获三、日常四、憧憬 一、机缘 不知不觉,已经加入CSDN这个大家庭5年多了,回想起3年前发布第一篇博客的时候,那时我记得很清楚,我在做项目时遇到报错,解决问题之后,然后想起了好多人…

SpringCloud(二)Docker、Spring AMQP、ElasticSearch

文章目录 DockerDocker与虚拟机Docker架构镜像、容器、镜像托管平台Docker架构Docker实践 Spring AMQP简单使用案例工作队列- WorkQueue发布订阅服务FanoutExchangeDirectExchangeTopicExchange 消息转换器 ElasticSearch倒排索引IK分词器IK分词拓展与停用字典 操作索引库mappi…

c#基础逻辑练习案例

第二章综合练习小游戏 练习内容 向控制台输出“这是学号姓名的C#基础小游戏”。向控制台换行再输出“请输入你的游戏昵称:”。向控制台输入你的游戏昵称,赋给一个字符串变量。向控制台换行再输出“请输入你的性别:”。向控制台输入你的性别…

创建vue3工程

一、新建工程目录E:\vue\projectCode\npm-demo用Visual Studio Code 打开目录 二、点击新建文件夹按钮,新建vue3-01-core文件夹 三、右键vue3-01-core文件夹点击在集成终端中打开 四、初始化项目,输入npm init 一直敲回车直到创建成功如下图 npm init 五…

Spring5应用之Cglib动态代理

作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者! 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏:Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 前言Cglib动态代理…

uCOSIII实时操作系统 二 同步与通信

目录 同步概念: 互斥概念: 临界区概念: 任务时间概念: 信号量概念: 互斥信号量概念: 事件标志组概念: 消息邮箱和消息梯队概念: 内存管理概念: 如何从裸机开发…

矢量图形编辑软件illustrator 2023 mac特点介绍

illustrator 2023 mac是一款矢量图形编辑软件,用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator mac软件特点 矢量图形:illustrator创建的图形是矢量图形,可以无限放大而不失真,这与像素图形编辑软件&am…

六、vpp 流表+负载均衡

草稿!!! vpp node其实就是三个部分 1、plugin init 2、set command 3、function 实现功能,比如这里的流表 今天我们再用VPP实现一个流表的功能 一、流表 1.1流表----plugin init VLIB_REGISTER_NODE 注册流表节点 // 注册流…

纯css实现3D鼠标跟随倾斜

老规矩先上图 为什么今天会想起来整这个呢?这是因为和我朋友吵架, 就是关于这个效果的,就是这个 卡片懸停毛玻璃效果, 我朋友认为纯css也能写, 我则坦言他就是在放狗屁,这种跟随鼠标的3D效果要怎么可能能用纯css写, 然后吵着吵着发现,欸,好像真能用css写哦,我以前还写过这种…

去雨去雪去雾数据集构建

在进行去雨去雪去雾算法的学习过程中,需要构建去雨去雪去雾数据集,本文参考Learning Multiple Adverse Weather Removal via Two-stage Knowledge Learning and Multi-contrastive Regularization: Toward a Unified Model论文中的数据集设定&#xff0c…

面试题 17.24. 最大子矩阵

链接: 面试题 17.24. 最大子矩阵 题解: 这样我们就将二维问题转化为了一维问题,现在另一个问题就是怎么把所有情况都遍历到呢? 我们以第i行为第一行,向下延申,设最后一行为第j行,我们就i在这么…

【AI视野·今日NLP 自然语言处理论文速览 第四十七期】Wed, 4 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Wed, 4 Oct 2023 Totally 73 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Contrastive Post-training Large Language Models on Data Curriculum Authors Canwen Xu, Corby Rosset, Luc…

手机或者电脑连接局域网内的虚拟机(网桥)

手机或者电脑连接局域网内的虚拟机(网桥) 手机软件:ConnectBot,Termius,JuiceSSH … 1.虚拟机vmware中添加桥接网卡 这里桥接网卡选择的是自动,是自动生成动态IP,如果不需要动态生成&#xff…

MySQL:数据库的物理备份和恢复-冷备份(3)

介绍 物理备份: 直接复制数据文件进行的备份 优点:不需要其他的工具,直接复制就好,恢复直接复制备份文件即可 缺点:与存储引擎有关,跨平台能力较弱 逻辑备份: 从数据库中导出数据另存而进行的备…

性能测试工具 - LoadRunner

什么是性能测试? 性能测试就是测试人员利用性能测试工具模拟系统在不同情况下的性能指标是否正常。 性能测试工具 - LoadRunner 接下来介绍LoadRunner的作用和使用。 LoadRunner 就是一个很常见的性能测试工具,它有三个部分组成: 这三个组…

【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门

大家在日常开发中应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。 因此,目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是…

Java实现微信支付

微信支付 小黄最在工作中对接需要对接微信支付,在此记录一下微信支付开发的相关流程,望能帮助到各位 前期准备 由于小黄是小程序端需要对接微信支付,需要注册小程序等,小黄会一一列举出来 小程序注册 所需文件 没有注册过微信…

私有云盘:lamp部署nextcloud+高可用集群

目录 一、实验准备: 二、配置mariadb主从复制 三台主机下载mariadb 1)主的操作 2)从的操作 3)测试数据是否同步 三、配置nfs让web服务挂载 1、安装 2、配置nfs服务器 3、配置web服务的httpd 4、测试 四、web 服务器 配…

排序篇(三)----交换排序

排序篇(三)----交换排序 1.冒泡排序 基本思想: ​ 通过不断地比较相邻的元素,将较大的元素往后移动,从而实现排序的目的。 具体的步骤如下: 从待排序的数组中选择相邻的两个元素进行比较,如果前一个元素大于后一个元素&#…