B+树是不是有序?B+树和B-树的主要区别?B+树索引,一次查找过程?
B+树是有序的。
B+树和B-树的主要区别?
- B-树内部节点是保存数据的;而B+树内部节点是不保存数据的,只作索引作用,它的叶子节点才保存数据。
- B+树相邻的叶子节点之间是通过链表指针连起来的,B-树却不是。
- 查找过程中,B-树在找到具体的数值以后就结束,而B+树则需要通过索引找到叶子结点中的数据才结束
- B-树中任何一个关键字出现且只出现在一个结点中,而B+树可以出现多次。
假设有这么一个SQL:
select * from Temployee where age=32;
age加个一个索引,这条SQL是如何在索引上执行的?大家可以举例子画个示意图哈,比如二级索引树,
再画出id主键索引,我们先画出聚族索引结构图,如下:
因此,这条 SQL 查询语句执行大概流程就是酱紫:
- 搜索idx_age索引树,将磁盘块1加载到内存,由于32<37,搜索左路分支,到磁盘寻址磁盘块2。
- 将磁盘块2加载到内存中,在内存继续遍历,找到age=32的记录,取得id = 400.
- 拿到id=400后,回到id主键索引树。
- 搜索id主键索引树,将磁盘块1加载内存,在内存遍历,找到了400,但是B+树索引非叶子节点是不保存数据的。索引会继续搜索400的右分支,到磁盘寻址磁盘块3.
- 将磁盘块3加载内存,在内存遍历,找到id=400的记录,拿到R4这一行的数据,好的,大功告成。