树,二叉查找树, 平衡二叉树,b树,b+树

文章介绍了树的概念,包括二叉查找树(BST)、平衡二叉树(AVL)以及B树和B+树,强调了它们在数据查找和存储效率上的优化。同时,讨论了数据库中的聚集索引和非聚集索引,聚集索引基于B+树,支持高效范围查询,而非聚集索引需要回表查询。
摘要由CSDN通过智能技术生成

树是一个大于等于1个有限节点组成的具有层次关系的集合,树上的节点要满足三个条件
    有并且只有一个节点没有父节点的这个节点称为根
    除了根节点,其他节点都有一个父节点
    树中的每个节点都构成以它为根的树

二叉查找树BST(Binary Search Tree)

二叉查找树是一种查找结构
具有三个性质
    左子树不空,所有左子树节点值小于根节点值
    右子树不空,所有右子树节点值大于根节点值
    左右子树本身有分别是一棵二叉查找树
    中序遍历会得到一个递增序列所以又叫二叉排序树最大特点(左根右)
	
查找:o(log2n)
   
    

平衡二叉树AVL

在二叉查找树的基础上多了一个要求,任意节点的左右树高度差不超过1
高度差的计算是左子树-右子树的高度
平衡因子为	-101
插入和删除会调整最小不平衡树
平衡二叉树相对于二叉查找树来说,效率更加稳定。

B树

二叉查找树和平衡二叉树随着数据越多,树的深度就越深,意味着io次数越多, 影响读取的效率
B树又叫多路平衡查找树
b树中所有节点的孩子节点数的最大值称为b树的阶
每个节点之多有m个孩子节点(即之多有m-1个关键字)
降低了深度查找数据的时候读取磁盘的次数就减少了。降低io操作,效率也就提升了
存储单元称之为页(页其实就是磁盘的每个磁盘块)

B+树

B+树就是B树的一个升级
b树和b+树的区别:
b树每个节点都存储了key和数据,而b+树只在叶子节点存储数据,其他数据只能存储key。
b树的叶子节点他们之间是没有关系的,而b+树的叶子节点是相互之间有一个引用链路的想链表一样
    
B+树所有的数据都存储在叶子节点上并且是按照顺序排列的。那么使用B+树完成范围查找,排序查找,分组查找,去重查找就会很简单,效率也比较高。而B树就不可以。因为B树的数据是分散个各个节点上的。

聚集索引和非聚集索引

聚集索引(聚簇索引):如果数据库使用InnoDB存储引擎,那么表中的数据一定会有一个主键,如果用户不创建主键系统也会帮你创建一个隐式的主键。
之所以一定要有主键因为InnoDB把数据放在B+树上,而B+树上的key就是主键。如果以主键构建的B+树索引那么就称之为聚集索引。

聚集索引:物理排序数据行,支持范围查询和顺序访问,一个表只能有一个。
    
        核心思想
根节点是常驻内存的,所有不需要进行IO操作
根据各节点找到对应的p,根据p的指针找到对应的下一级页。最终达到叶子节点。通过二分查找法定位到数据位置,通过单向链表或者当前页的数据,再通过双向链表获取下一页的数据,最终获取所有需要查询的数据。

    
非聚集索引:根据索引键值查找数据行,支持快速定位,一个表可以有多个。
        核心思想
定位为查询的数据以后只能得到索引对应的主键,那么需要根据主键进行回表查询(拿着主键去聚集索引中获取数据)。
    
    非聚集索引:以主键以外的列作为key构建B+树索引就称之为非聚集索引
    
使用聚集索引的查询效率要比非聚集索引的效率要高,但是如果需要频繁去改变聚集索引的值,写入性能并不高,因为需要移动对应数据的物理位置。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小松同学不会敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值