统治者很短,有董事。如果您不忘记自己的原始意图,那么您必须始终。
请注意公共帐户:Xinghe的代码
在上一篇文章“索引基本知识的评论”中,该索引根据存储结构分为B树索引,哈希索引,B+树索引类型。接下来,了解这些索引结构以及实际存储引擎
哈希的底层由哈希表实现。存储引擎将[计算所有索引列的哈希代码](哈希代码)。根据密钥值,保留指向每个数据行的指针
MySQL哈希结构中的哈希索引主要用于内存的本机哈希索引和InnoDB自适应哈希索引。在“ InnoDB的存储结构”中,它引入了自适应哈希索引,在这里不会重复。
平衡的多路发现树(B-Tree):它是一种平衡的搜索树,设计用于磁盘等外部存储设备。
我们知道,InnoDB存储引擎中的页面是磁盘管理的最小单元。默认值为16KB,并且磁盘块的存储空间不大。因此,大小为16kb。如果查询期间的数据在一页中,则磁盘I/O的数量将减少,并且查询效率将得到提高。
B树结构的数据允许系统找到有效位置数据的磁盘块。每个节点可以根据实际情况包含大量关键字信息和分支。下图是3阶B-Tree:
从上图可以看出,B树具有以下功能:
模拟搜索关键字的过程29:
通过上述过程,我们发现29个,只有3个IO,而三阶B树可以容纳数百万个数据,这对于改进查询性能是巨大的。项目总共需要一百万次,显然成本很高。
B+树是基于B树的优化,使其更适合于前存储索引结构。InnoDB存储引擎是使用B+树来实现其索引结构。
上面提到的数据页的存储空间默认为16KB,而B树组成可以看到每个节点不仅包含数据的数据值,还包含数据值。当数据很大时,可以存储在节点中的键(即一页)将很小,从而导致B树的深度深度,从而增加查询期间磁盘I/O的数量,然后影响查询效率。
在这方面,B+树是优化的,所有数据都存储在同一层的同一层叶节点上。非叶子节点仅存储要增加的钥匙值,降低B+树的高度。下图显示了3阶B+树:
示意图可以看出,B+树不仅将数据存储在叶节点上,而且在所有叶子节点(数据节点)之间具有链条指针,该指针促进了叶子节点的范围。以下内容:
MySQL中的索引是存储发动机级别的概念。Myisam和InnoDB都使用B+树作为索引结构,但是不同的存储引擎对索引具有不同的实现方法。
在文章“存储引擎”中,每个表有两个文件:.FRM表结构文件,myd表数据文件和.MYI索引文件。DATA和索引分别存储。
当Myisam使用B+树作为索引结构时,该结构的数据域。.MYI索引文件的数据节点存储了数据记录的地址。
根据示意图:Myisam在索引检索时首先根据B+树搜索算法搜索索引。如果存在指定的密钥,请占据数据域的值,然后使用数据域的值作为读取相应数据记录的地址。
在Myisam中,主索引和辅助索引(辅助键)的结构没有差异,但是主索引要求键是唯一的一个,并且可以重复辅助索引的键。
在文章“存储引擎”中,我有两个用于InnoDB的文件:.FRM表结构文件,.ibd数据文件。数据和索引一起存储在一起。当数据找到数据时,发现数据。
4.2.1群集索引(收集索引)InnoDB的群集索引是按主键的顺序构建B+树结构。叶节点数据域存储完整的数据记录,并且记录和键被紧凑地存储在一起。也就是说,InnoDB的主要密钥索引是数据表本身。它按主键的顺序存储整个表的数据,而所占用的空间是整个表数据的大小。
4.2.2 InnoDB中的辅助索引(第二级索引),主索引的数据域存储和辅助索引(辅助键)(辅助键)不同,这与Myisam不同。
如示意图所示,主键存储在辅助索引中的数据域中,因此通常需要两次找到辅助索引才能找到数据:
原始:https://juejin.cn/post/7096105968034906143