一、Mysql 索引

本文深入探讨了数据库索引的原理,包括B+Tree的特性,解释了为何在MySQL中选用B+Tree作为索引数据结构。此外,对比了B-Tree与B+Tree的区别,指出B+Tree在空间利用率和增删效率上的优势。接着,介绍了聚集索引与非聚集索引的概念,分析了它们在数据存储和查询性能上的差异。最后,阐述了索引的最左前缀原则,说明如何利用这一原则提高查询效率。
摘要由CSDN通过智能技术生成

一、什么是索引

索引是帮助MySQL高效获取数据的排好序的数据结构

索引常用的数据结构:二叉树、红黑树、Hash表、B-Tree,MySQL当前使用的是B+Tree,B+Tree是B-Tree的变种。

B-Tree特性:

  • 叶节点具有相同的深度,叶节点的指针为空
  • 所有索引元素不重复
  • 节点中的数据索引从左到右递增排序
  • 索引有可能在非叶子节点结束
  • 自动分层控制
    在这里插入图片描述
    B+Tree特性:
  • 非叶子节点不存储data,只存储索引,可以放更多的索引
  • 叶子节点包含所有索引字段,所有查找都在叶子节点结束
  • 叶子节点用指针连接、提高区间访问的性能

在这里插入图片描述

可以看出,相对于B-Tree:B+树空间利用率更高,因为B+Tree的内部节点只是作为索引使用,而不像B-Tree那样每个节点都需要存储硬盘指针;增删文件(节点)时,效率更高,因为B+Tree的叶子节点包含所有关键字,并以有序的链表结构存储,这样可很好提高增删效率。

实际上,很多时候Hash索引要比B+Tree索引更高效,而且对索引KEY进行一次Hash计算就可以定位出数据存储的位置。那为什么不使用Hash索引?主要是因为Hash索引仅能满足“=”,“IN”,不支持范围查找,而且存在Hash冲突的问题。
在这里插入图片描述

二、聚集索引和非聚集索引

聚集索引和非聚集索引都采用了B+Tree的结构,但非聚集索引的叶子层并不与实际的数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。
  聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。
  聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。
  非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B+Tree的结构,但非聚集索引的叶子层并不与实际的数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。非聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。

MyISAM使用的是非聚集索引,索引文件和数据文件是分离的。
在这里插入图片描述
InnoDB使用的是聚集索引,表数据文件本身就是按照B+Tree组织的一个索引结构文件;叶节点包含了完整的数据记录;建议InnoDB表必须建主键,并且推荐使用整型的自增主键;同时为了保持一致性和节省存储空间,非主键索引叶子节点存储的是主键值。

在这里插入图片描述
在这里插入图片描述

三、索引最左前缀原理

假设建立(a,b,c)联合索引,就会按照a,b,c的顺序对索引文件进行排好序。查询条件为a,b或a,b,c时满足最左前缀原理,可以快速找到索引数据。如果查询条件为a,c或b,c时则会对全表进行扫描。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值