MySql学习笔记-02索引

本文介绍了MySQL中覆盖索引的概念及其提高查询效率的作用,解析了为何使用B+树作为索引结构的原因,涉及到数据库命令如explain、analyze table和alter table的应用,并详细阐述了orderby执行规则,包括无索引时的排序过程。通过对索引和执行规则的理解,有助于提升数据库查询性能。
摘要由CSDN通过智能技术生成

索引

1、覆盖索引的使用

作用: 为了提供数据库的查询性能,使用覆盖索引
举例: 只需要通过特定搜索字段A查询特定字段B,可以通过构建A和B的联合索引,提高查询效率。如果只对查询字段建立了索引,那么需要先通过查询字段找到对应的主键ID,再通过主键ID获取对应整行的值
原因: 一张表,以主键为key,整行数据为value构建B+树。如果建立了额外字段A的索引,会以A为key,主键为value构建B+树。这样就导致了其他索引去查表中字段的时候,先是找到对应的主键,再去取主键对应的整行数据

2、为什么使用B+树

1、其他二叉树的树高会很高,会有较高的寻址代价。
2、为什么不使用B树呢?减少磁盘的IO次数。B树每层节点也会存value值,导致查询索引的时候增加了页切换的频次。而B+树所有value值都放在叶子节点中,存储索引值占用的页数少,能够很好的配合磁盘的读写特性,减少磁盘的访问次数。

3、数据库相关命令

  • explain命令 查询数据库语句命中了索引
  • 如果索引统计信息不正确,可以使用 analyze table命令
  • 如果一个表非常大,而实际上并没有存储那么多内容,可以使用 alter table 命令重建表

4、order by执行规则

  • 如果排序字段没有建立索引:
  1. 通过查询条件找到所有符合条件的主键ID
  2. 通过主键ID获取所有行数据
  3. 按照排序字段对所有行数据进行排序
  4. 生成结果集
  • 注意 如果内存处理不了这么多数据,会存储成多个临时文件,然后分别对每个临时文件进行排序,最后再使用归并排序汇总这些文件的排序信息。
  • 如果排序字段没有建立索引,并且一行数据太多:
  1. 通过查询条件找到所有符合条件的主键ID
  2. 通过主键ID获取所有行数据
  3. 所有行数据中取出排序字段和主键,并存入到buffer中
  4. 按照排序字段对buffer中数据进行排序
  5. 通过已经排序好的主键ID获取所有行数据
  6. 生成结果集
  • 如果排序字段建立了索引:
  1. 通过查询条件和排序索引字段生成已经排序好的主键ID列表
  2. 通过已经排序好的主键ID获取所有行数据
  3. 生成结果集
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值