关于实战的问题

来源:3-7 密集索引和稀疏索引的区别

慕工程6478377

2019-02-12

输入正文

前面提了一个能否运用实例来讲解的问题,老师说需要调试源码,但是回复里面不好回复,这里新开一个问题。

使用实例讲解不一定要调试源码,比如可以使用一个具体的表为例子,如一个user表(字段为id、name、age),在插入一条数据之后索引如何变化。假设索引是3阶的B+tree,一开始没有数据,在插入一条数据(1,aa,10)时索引结构为:

---------

|key=1 |

--------

|1,aa,10|

----------

在插入一条(2,bb,11)的数据之后索引结构为:

--------------------

|key=1  | key=2 |

--------|--------|

|1,aa,10|2,bb,11|

------------------

如此类推,在插入第三条数据(3,cc,12)时:

--------------------------

|key=1  | key=2 | key=3 |

--------|---------|--------|

|1,aa,10|2,bb,11 |3,cc,12|

---------------------------

插入第四条数据(4,dd,13):

由于达到3阶的限制,发生节点分裂: 

                ---------

                |key=2 |

                ---------

             /                \

           V                   V

--------             -------------------------

|key=1 |         |key=2  | key=3 |key=4 |

|--------|         |------- -|-------|---------|

|1,aa,10|         |2,bb,11 |3,cc,12|4,dd,13|

---------         ---------------------------

上面的图可能有误,但是大概就是这么个意思,并不需要去调试源码,只需要一个抽象的能解决问题的模型就可以了


写回答

1回答

翔仔

2019-02-13

同学好,你说的这个也是课程的思路,课程先介绍了B树是如何加入数据的,然后才引出的索引,也就是说因为索引也是基于B树的思想(B和B+的添加数据的思路都是差不多的),所以加数据也是这种模式,在讲解了这样添加的方式了之后,理解这些索引的存储方式并不难了,对于索引来讲,其他非主键的列都是附属的,主要关注主键的数据,所以方式也是基本一样的。。

0
0

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8441 学习 · 1872 问题

查看课程