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

相关推荐
程序员大金10 分钟前
基于SSM+Vue+MySQL的酒店管理系统
前端·vue.js·后端·mysql·spring·tomcat·mybatis
Kk.61614 分钟前
SQL编程题复习(24/9/20)
数据库·sql·pta考试·专本贯通
程序员大金20 分钟前
基于SpringBoot的旅游管理系统
java·vue.js·spring boot·后端·mysql·spring·旅游
Yz987627 分钟前
Hadoop-MapReduce的 原理 | 块和片 | Shuffle 过程 | Combiner
大数据·数据库·数据仓库·hadoop·mapreduce·big data
加油=^_^=43 分钟前
MySQL基础篇的补充
数据库·python·mysql
porkczr1 小时前
oracle rac多个实例就相当于多个数据库系统程序
数据库·oracle
码java的秃头阿姨1 小时前
SpringBoot设置mysql的ssl连接
spring boot·mysql·ssl
程序员大金1 小时前
基于SpringBoot+Vue+MySQL的养老院管理系统
java·vue.js·spring boot·vscode·后端·mysql·vim
大白菜和MySQL2 小时前
mysql mha高可用集群搭建
数据库·mysql
QQ爱剪辑2 小时前
MySQL基础(13)- MySQL数据类型
数据库·mysql