三、索引-为了查的更快

本文深入探讨了InnoDB的索引结构,包括聚簇索引的概念,如何通过B+树提高查询效率,以及二级索引的工作原理。同时提到了MyISAM的索引方案,它的索引与数据分开存放,通过行号定位数据。
摘要由CSDN通过智能技术生成

先前讲过了Innodb的行格式以及页格式,以及页保存记录的规矩。你忘记了就回顾看看上篇文章,粉丝才能看哦。

  Innodb向页中插入记录时,是按照主键的顺序排序的,记录组成了单向链表。页与页又组成了双向链表,每个页都有页号和记录的主键范围,这样其实就能完成基本的查找要求。

      如果我们的每条记录都比较大,平均三条记录就占一个页。那页的链表就会很长,查找就会很慢了。本着追求更快的原则,我们需要从长计议。

1、聚簇索引

     我们在页21、10、100里各存了三条,再使用页1保存前面3页的用户最小记录和所处的页号。这种结构使得我们在查找一条记录时,先查找页1,二分法查找页1的槽,然后再遍历组内的数据得到新的页号,再二分法找新的槽,遍历新的组,最后定位到数据。这样的查询方式数据越多越能体现查询优势。

    如果此时新增了一条主键为34的数据。页100已经满了,就会申请新的页存放新数据,新的页生成之后也会更新页1,如果页1页满了,同样也会申请新的页进行记录保存。

    如此往复,就形成了一棵B+树。所有用户记录处于最下层,成为叶子节点;所有的非叶子节点存放的都是下一层页内记录最小的记录主键与页号。这种B+树还有一个名字叫聚簇索引,也是在建表时自动建立,整个表空间只有一棵聚簇索引,也只有聚簇索引保存着完整的用户记录,其他索引不会保存完整的用户记录。

2、二级索引

     从聚簇索引的规则看,只有通过主键查询的时候才能使用B+树,如果查询条件不是主键,那你还是要老老实实的遍历所有叶子节点!于是就需要建立二级索引。

    聚簇索引使用主键+页号为规则建立了一颗B+树,那么二级索引就是以我们(需要的列+主键)+页号为规则建立一棵B+树。不同的是,聚簇索引叶子节点保存的是用户的完整记录,二级索引的叶子节点与非叶子节点一样,只保存了索引列和主键列!

    通过聚簇索引,我们能直接获取到用户的完整记录,也就是所有列信息。通过二级索引只能索引到一个主键,需要再通过主键到聚簇索引中查询用户完整的记录,这种行为也叫做回表。

   二级索引和聚簇索引原理上都是B+树,建立一个索引就是建立一棵B+树。如果你建立的是联合索引,其实也是一棵B+树,索引列有多个,但是多个索引列严格遵守定义时的顺序,索引出的结果可以理解为and而不是or。

   二级索引之所以要带有主键,是为了保证B+树节点的唯一性

3、MyISAM的索引方案简单介绍

    Innodb聚簇索引在索引的时候就能得到数据,二级索引是先索引出主键,再回表得到数据。

    MyISAM则是将索引与真实数据分开存放,通过索引列+行号建立一棵B+树,索引出行号,然后再到另一个地方取出数据。

数据则是根据插入顺序保存起来的,每条数据都有对应的行号。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,为适合; 4、下载使用后,可先看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,为适合; 4、下载使用后,可先看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,为适合; 4、下载使用后,可先看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值