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

相关推荐
SelectDB8 小时前
高并发 BI 看板怎么撑住:隔离与加速配置速查
大数据·数据库·数据分析
l1t9 小时前
测试DuckDB v2.1.0-alpha49002的bignum乘法
数据库·sql·算法·duckdb
麦壳饼9 小时前
SonnetDB:向量召回率评估中的精确基线与参数记录
数据库·sonnetdb
ClouGence9 小时前
数据如何随时可用?广西水牛先生的 MySQL 实时同步实践
数据库·mysql·数据分析
斯晨的AI笔记9 小时前
rsync 部署避坑:脚本执行位被 git 模式位抹掉,巡检备份双静默失败的排查与根治
数据库
这个DBA有点耶10 小时前
innodb_autoinc_lock_mode的三种模式:批量插入时自增锁的持有逻辑与调优
数据库·架构·代码规范
我命由我1234510 小时前
5-1.Python 编码进阶 - 函数进阶(参数、返回值、递归、函数作为参数传递、lambda 匿名函数)
java·服务器·数据库·后端·python·java-ee·python3.11
小蒜学长10 小时前
基于Spring Boot+Vue3的在线游戏技术指导师匹配系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·在线游戏技术指导
Web3&Basketball11 小时前
DeepSeek V4.1 Flash 实测:Token 砍半、Search API 跑通
数据库·人工智能·python·大模型·api调用·deepseek·推理优化
川石课堂软件测试11 小时前
涨薪技术|0到1学会性能测试第9课-HTTP响应统计
数据库·功能测试·网络协议·http·kubernetes·单元测试·测试用例