索引lalla

为什么不用二叉树/红黑树
如果是递增插入,二叉树可能是链化了
红黑树虽然可以自平衡,但还是会很深,对应IO次数就是很多。
B+树
预先分配一个节点,分配的磁盘空间大一点,里面可以放更多的索引元素,在树高度可控的情况下,能放更多元素
索引lalla_第1张图片
因为索引是顺序存放的,可以折半查找,
索引lalla_第2张图片
索引lalla_第3张图片
B树没有双向指针,那范围查找的时候还得回到上层

此外,B+树将数据放在叶子结点,非叶子节点可以存储更多数据,可以做更多分叉,

索引lalla_第4张图片
索引lalla_第5张图片
一颗三层是B+树能存多少数据
16kb
一个值4b+引用6b
16kb/10b=1638
第二层:16381638
第三层存数据,按1kb算,能存16kb/1kb=16
三层能存16
1238*1628

不是建了索引就一定走索引的,你、
如:select * from table where id > 1
这个时候走走索引相对于全表扫描更慢,因为要回表,不走索引
但select id from table where id > 1 就会走索引

select id from table
也会走索引,虽然没有where

对字段进行操作就用不了索引,比如where a+1=2;
不会直接转成a=1;
或者类型转换,比如b是字符类型,,where b=1. 要进行类型转换


索引lalla_第6张图片
索引lalla_第7张图片
索引lalla_第8张图片
索引lalla_第9张图片
索引lalla_第10张图片
集群
索引lalla_第11张图片
索引lalla_第12张图片
索引lalla_第13张图片
索引lalla_第14张图片
索引lalla_第15张图片
在这里插入图片描述
索引lalla_第16张图片
索引lalla_第17张图片

你可能感兴趣的:(b树,数据结构)