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索引分类、聚集索引、二级索引、覆盖索引

相关推荐
q9085447039 分钟前
MySQL 二进制日志binlog解析
mysql·binlog·binlog2sql·my2sql
Edingbrugh.南空1 小时前
Flink SQLServer CDC 环境配置与验证
数据库·sqlserver·flink
码不停蹄的玄黓1 小时前
MySQL分布式ID冲突详解:场景、原因与解决方案
数据库·分布式·mysql·id冲突
爱上语文2 小时前
Redis基础(6):SpringDataRedis
数据库·redis·后端
Java初学者小白2 小时前
秋招Day14 - Redis - 应用
java·数据库·redis·缓存
帧栈3 小时前
mysql基础(一)快速上手篇
mysql
丶意冷3 小时前
mybatisPlus分页方言设置错误问题 mybatisPlus对于Oceanbase的Oracle租户分页识别错误
java·数据库·oracle·oceanbase
时序数据说5 小时前
为什么时序数据库IoTDB选择Java作为开发语言
java·大数据·开发语言·数据库·物联网·时序数据库·iotdb
戒不掉的伤怀5 小时前
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
服务器·数据库·mysql
cv高级工程师YKY5 小时前
服务器 - - QPS与TPS介绍
数据库