红黑树,B-tree,B+tree结合mysql索引的学习分析

sql语句在mysql里面如何运行的?怎么去查找?
目录查找:类似索引
健查找:hash查找
遍历:暴力查找
二分:B+树的基础算法
能做索引的结构:数组,红黑树,链表,哈希,B树(B-,B+)

hash为什么不能做mysql索引?
hash函数值会计算出一个hash值,。hash(user_id)=key 一旦used变了key值也变了。
hash索引并不支持范围查找,以及字符串匹配类似like语言的查找。。。
hash索引也最多只能用户查询条件完整、不可改变的查询,但是毋庸置疑,hash索引的查找速度非常快

计算机一页存16k数据。

用红黑树不能用于索引的原因
1.读取磁盘次数过多
2.读取浪费太多

那为什么又可以在hashMap的查找里面呢?
hashMap是存内存里面,读取很快

B-tree B+tree B*tree
B-tree N叉排序树

M阶的Btree的几个重要特性
1.节点最多含有M棵子树(指针),(m-1)关键字(存的数据,空间(m>=2))
2.除了跟节点和叶子结点外,其他每个节点至少有ceil(m/2)个子节点,ceil向上取整
3.如果跟节点不是叶子结点,则至少有两颗子树

Btree有一个分裂操作,当一棵树不满足以上性质的时候,进行分裂操作
分裂的时候从中间分开,分成两颗子树

B+tree
1 叶子结点连起来了
2 非叶子结点不存数据
3 数据和结点一样多
4 叶子结点通过双向列表连接,从而支持范围查找

B+tree的阶是怎么算出来的
根据页的大小来算

总结
二叉查找树、红黑树、B-tree,B+tree的区别

二叉查找树、二叉搜索树:
优点:查找速度快、但是在某些情况下
缺点会退化为链表,它是所有高效查找树的基础。

红黑树:
内存查找高效树,不适合大数据量,也不适合磁盘存储,具体分析就是I/O浪费,以及读取资源的浪费,还有都是树的深度会很大,适合一些底层系统做运算

红黑树为什么会有I/O浪费?
对于索引查找来说,mysql的信息存储在磁盘,这导致每一层数据,我们都需要访问一次磁盘,但是由于红黑树是二叉树,不可避免的造成了其深度过深,层数过多,访问磁盘的次数上升,造成了I/O浪费

B-tree N叉排序树

B+tree,最适合大数据的磁盘索引,经典的mysql,所有的数据都存在叶子结点,其他
都是索引,增加了系统的稳定性以及遍历以及查找效率

不同:关键字和key值,数据存储的地方,双向链表
M阶:这个由磁盘的页大小决定,磁盘块和页内存都是4KB,我们的结点数目也就是我们的
M值,应该是要尽可能的跟他一样,这样的好处就是为了我们一次刚好能全部拿出一个节点
里面存的所有数据。

N

你可能感兴趣的:(面试)