行政单位门户网站建设方案,抖音代运营公司加盟,郑州注册公司代理记账,公共资源交易中心主任级别上一次我们给大家说了主键索引的目录结构#xff0c;只要在一个主键索引里包含每个数据页跟他最小主键值#xff0c;就可以组成一个索引目录#xff0c;然后后续你查询主键值#xff0c;就可以在目录里二分查找直接定位到那条数据所属的数据页#xff0c;接着到数据页里二…上一次我们给大家说了主键索引的目录结构只要在一个主键索引里包含每个数据页跟他最小主键值就可以组成一个索引目录然后后续你查询主键值就可以在目录里二分查找直接定位到那条数据所属的数据页接着到数据页里二分查找定位那条数据就可以了如下图所示。 但是现在问题来了你的表里的数据可能很多很多比如有几百万几千万甚至单表几亿条数据都是有可能的所以此时你可能有大量的数据页然后你的主键目录里就要存储大量的数据页和最小主键值这怎么行呢
所以在考虑这个问题的时候实际上是采取了一种把索引数据存储在数据页里的方式来做的
也就是说你的表的实际数据是存放在数据页里的然后你表的索引其实也是存放在页里的此时索引放在页里之后就会有索引页假设你有很多很多的数据页那么此时你就可以有很多的索引页此时如下图所示。 但是现在又会存在一个问题了你现在有很多索引页但是此时你需要知道你应该到哪个索引页里去找你的主键数据是索引页20还是索引页28这也是个大问题
于是接下来我们又可以把索引页多加一个层级出来在更高的索引层级里保存了每个索引页和索引页里的最小主键值如下图所示。 现在就好了假设我们要查找id46的直接先到最顶层的索引页35里去找直接通过二分查找可以定位到下一步应该到索引页20里去找接下来到索引页20里通过二分查找定位也很快可以定位到数据应该在数据页8里再进入数据页8里就可以找到id46的那行数据了。
那么现在问题再次来了假如你最顶层的那个索引页里存放的下层索引页的页号也太多了怎么办呢
此时可以再次分裂再加一层索引页比如下面图里那样子大家看看下图。 不知道大家有没有发现索引页不知不觉中组成了多个层级搞的是不是有点像一棵树
没错了这就是一颗B树属于数据结构里的一种树形数据结构所以一直说MySQL的索引是用B树来组成的其实就是这个意思。
我们就以最简单最基础的主键索引来举例当你为一个表的主键建立起来索引之后其实这个主键的索引就是一颗B树然后当你要根据主键来查数据的时候直接就是从B树的顶层开始二分查找一层一层往下定位最终一直定位到一个数据页里在数据页内部的目录里二分查找找到那条数据。
这就是索引最真实的物理存储结构采用跟数据页一样的页结构来存储一个索引就是很多页组成的一颗B树。
好了今天讲完之后基本上就初步让大家对索引这个东西有一个入门了接下来我们就要比较深入的去分析各种索引的物理存储的原理
理解了索引后续再讲查询原理和执行计划你基本就很容易理解了。