MySQL索引那些事 (25)

假设我们查大于20的记录,mysql内部是怎么查找的?先从根节点,定位到大于20的元素,然后依次从左到右找到30,然后这个节点遍历完了,就可以根据指针找到下一个节点的位置,因为B+Tree的特点,后面的元素全都大于20,就这样顺藤摸瓜把后面的元素全弄出来。

 

那B-Tree没有这个指针的话查找大于20 的元素那得多麻烦,先找出第一个节点中大于20的全部元素,因为还有别的节点,所以又要从根节点去遍历找下一个叶子节点,是不是非常慢。没有这个指针每次都要从根节点开始查找然后合并,那是非常慢的。

 

为什么非主键索引结构叶子节点存储的是主键值?

为了一致性和节省存储空间。已经维护了一套主键索引+数据的B+Tree结构,如果再有其他的非主键索引的话,索引的叶子节点存储的是主键,这是为了节省空间,因为继续存数据的话,那就会导致一份数据存了多份,空间占用就会翻倍。另一方面也是一致性的考虑,都通过主键索引来找到最终的数据,避免维护多份数据导致不一致的情况。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxwff.html