简记索引是什么,是如何加速查询的

本文深入探讨了MySQL中B+树索引的原理,对比了B树与B+树的区别,指出B+树如何支持快速查询。还介绍了索引类型,包括主键索引与非主键索引(聚集索引与非聚集索引)以及复合索引的创建和使用策略。强调了复合索引的最左匹配原则及其在多条件查询中的优化作用。
摘要由CSDN通过智能技术生成

        索引类型就不再叙述了

        直接开搞,接入正题

        MySQL 里绝大多数索引都是 B+树,另外有少数情况会使用 Hash索引、R-tree等等,今天只讨论 B+树。

先来讲一下B树和B+树的区别

B树是一种多叉平衡查找树,主要特点:

  1. B树的节点中存储着多个元素,每个内节点有多个分叉。
  2. 节点中的元素包含键值和数据,节点中的键值从大到小排列。也就是说,在所有的节点都储存数据。
  3. 父节点当中的元素不会出现在子节点中。
  4. 所有的叶子结点都位于同一层,叶节点具有相同的深度,叶节点之间没有指针连接。

缺点:

  1. B树不支持范围查询的快速查找,它需要回到根节点重新遍历查找,需要从根节点进行多次遍历,查询效率有待提高。
  2. 如果节点的数据存储的是行记录,行的大小随着列数的增多,所占空间会变大。这时,一个页中可存储的数据量就会变少,树相应就会变高,磁盘IO次数就会变大。 

        B+树,作为B树的升级版,在B树基础上,MySQL在B树的基础上继续改造,使用B+树构建索引。B+树和B树最主要的区别在于非叶子节点是否存储数据的问题

区别:

  1. B树:非叶子节点和叶子节点都会存储数据。
  2. B+树:只有叶子节点才会存储数据,非叶子节点至存储键值。叶子节点之间使用双向指针连接,最底层的叶子节点形成了一个双向有序链表。 

 索引加快查询的原因

        了解索引B+树的结构后,再来看一下查询流程

  • B+树根据索引等值查询

  •  范围查询

        可以看出有了索引就不需要再进行全文查找了

 索引类型的区别

  • 主键索引与非主键索引又称聚集索引与非聚集索引

        这个不带行数据完整信息的索引,就叫二级索引(secondary index),也叫辅助索引。

        整个过程就是在查找到David后,会通过它们的主键去聚合索引查到行数据

  •  复合索引又称联合索引,组合索引

        如果想根据姓名和年龄同时查询,我们给 name 和 age 同时建索引:

        这时候会发现5,4两个元素换了个位,因为排序时,是先用 name 比较大小,如果 name 相同,则用 age 比较。 

        这是多条件查询顺序的一种情况,例如复合索引(a_b_c),是不是等于有了索引:a,a_b,a_b_c三个索引,这样是不是节省了空间,当然节省的空间并不是三倍于(a,a_b,a_b_c)三个索引,因为索引树的数据没变,但是索引data字段的数据确实真实的节省了。

        其他的情况,只给 student 表建 idx_name_age 这个复合索引,查询条件只查name或者只查age,也可以是顺序调换一下先查age后查name,这些情况并不完全走索引。这就又要说一下最左匹配原则了,因为mysql创建复合索引时,首先会对最左边字段排序,也就是第一个字段,然后再在保证第一个字段有序的情况下,再排序第二个字段,以此类推。因此,只有只查name的时候才会走索引。

所以复合索引最左列是绝对有序的,其他字段无序。

        联合索引的创建原则,在创建联合索引的时候因该把频繁使用的列、区分度高的列放在前面,频繁使用代表索引利用率高,区分度高代表筛选粒度大,这些都是在索引创建的需要考虑到的优化场景,也可以在常需要作为查询返回的字段上增加到联合索引中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值