mysql索引笔记

常见索引的类型

  • hash索引
    适用于等值查询的场景
  • 有序数组
    适用于等值查询和范围查询
  • 搜索数

InnoDB B+树索引

innoDB的索引分2种

  • 聚簇索引(也叫主键索引)
  • 二级索引(也叫非主键索引)


    image.png

    图中左边是聚簇索引,右边是二级索引,两者最大的区别就是叶子节点的内容不一样,聚簇索引的内容是整行数据,二级索引的内容是行的主键。

索引插入
image.png

插入700时,加到R5后面。


image.png

插入400时,R4,R5移动空出位置。如果R5所在的数据页已满的情况下,会申请新的页,然后将部分数据挪到新页,这个过程叫页分裂。

索引的等值查找

select * from T where ID=500 该语句是主键查找方式,直接搜索聚簇索引,即图中左边的索引,直接得到R4.
select * from T where k=5 该语句走的是右边的二级索引,查询到的是500这个主键,所以需要再用500去左侧主键索引搜索,查询到R4这个数据,也就是说二级索引搜索要扫描2次,一次是二级索引,另外一次是主键索引,这个过程叫回表。

索引的范围查找

select * from T where k between 3 and 5


image.png

第一步:使用3扫描二级索引取得ID=300,拿着300扫描主键索引得到R3。
第二部: 取下一个值k=5 取得ID=500,拿着500扫描主键索引得到R4。
第三步: 取下一个值 K=6,不满足 between 3 and 5 的条件,循环结束。

覆盖索引

select ID from T where k between 3 and 5
该语句只查ID,因为二级索引的叶子节已经是ID,所有不需要回表,可以理解为索引已经覆盖了结果范围。

最左前缀原则
image.png

如图的索引,当查张三时,可以快速定位到ID4,然后遍历所需的结果。
where name like ‘张%’ 也能用上索引。
最左前缀可以是联合索引的最左N个字段,也可以是字符串索引的最左M个字符。

索引下推

select * from tuser where name like '张%' and age=10 and ismale=1;
在MySQL 5.6之前,只能从ID3开始一个个回表。到主键索引上找出数据行,再对比字段值
MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索
引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。


image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 索引概述 索引即key 在存储引擎层实现,不同引擎工作方式不同 索引优化--最好的查询优化手段,可提效几个数量级 ...
    PennLi阅读 3,715评论 0 2
  • 首先问问这些知识点自己是否清楚。 索引的常见数据结构有哪些?(哈希表,有序数组,B+树),它们分别有怎样的特点?分...
    不怕天黑_0819阅读 4,258评论 0 4
  • 原文《MySQL实战45讲》 前言 ​ 在日常工作中经常接触到数据库索引,但到底什么是索引,索引又是如何工作的...
    灰气球阅读 2,622评论 0 0
  • 参考资料:极客时间《MySQL实战45讲》 1 基础架构 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支...
    IM后海大鲨鱼阅读 4,430评论 0 0
  • 二、面试题 1、一条SQL查询语句是如何执行的? 大体来说,MySQL可以分为Server层(MySQLD)和存储...
    想54256阅读 4,801评论 0 1

友情链接更多精彩内容