Mysql与索引有关的树的概念

1.简单地认识下与索引有关的数据结构:
树的简单概念:由n个节点组成具有层次关系的集合,根朝上叶朝下
树的特点:每个节点有0或多个子节点,无父节点称为根节点,每个非根节点有且只有一个父节点,每个节点可分为多个不相交的子树(父节点除外) 

二叉树的简单概念:每个节点最多有2个子树的树结构,有左右子树之分 

二叉查找树的简单概念:二叉树的前提下,左子树上所有节点的值均小于/等于其父节点的值,右子树上所有几点的值均大于/等于其父节点的值,左右子树也分别为二叉查找树
二叉查找树的查找步骤:小于往左,大于往右,相等则查找成功,子树为空不成功 

但是,二叉查找树遇到以下的情况效率会很低 

存在某一节点高度过高

就有了平衡二叉树的存在
二叉平衡树的简单概念:在二叉查找树的前提下,任何节点的两棵子树的高度最大差为1(|BF|<=1)
平衡因子(BF):BF=左子树深度—右子树深度
要维持二叉平衡树的平衡,最为重要的是找到其最小不平衡树,最小不平衡树可以这样来找:找距离插入节点最近且平衡因子的绝对值大于1的结点为根的子树,找到最小不平衡树之后呢,需要将其变为平衡,主要是依靠旋转来实现的
如何维持平衡(3种最小不平衡树,3种旋转方式):
a.左旋:BF< -1时,父节点变为该节点的左节点
b.右旋:BF> 1时,父节点变为该节点的右节点
c.左旋+右旋 or 右旋+左旋:插入节点后,最小不平衡树的BF与它的子树的BF符号相反时,依具体情况先旋转一次使符号相同后,再反向旋转一次 

但是,二叉树每一个节点最多也就对应2个子节点,节点一多的话树的高度就会很大,查找起来要遍历的层数会很多,效率还是个问题,于是,B+树便应运而生了 。

B+树的简单概念:一种特殊的平衡查找树,所有记录节点都是按键值大小顺序存放于同一层的叶子节点,各叶子节点以指针进行衔接,键值小在左,键值大在右 。

叶子节点从左到右顺序遍历便可得到所有键值的顺序排序,这也是为什么联合索引需满足“最左前缀匹配”的原因。

原文地址:https://www.cnblogs.com/cbxBlog/p/9192895.html

时间: 2024-10-11 01:23:04

Mysql与索引有关的树的概念的相关文章

MySQL 索引与 B+ 树

MySQL 索引与 B+ 树 B+ 树 MySQL Innodb 存储引擎是使用 B+ 树来组织索引的.在介绍 B+ 树以前,先认识一下什么是 B 树,B 树是平衡二叉树,与一般的二叉查找树不同,平衡二叉树首先满足二叉查找树的定义(左子树的键小于根的键,右子树的键大于根的键),其次必须满足任何节点的两个子树的高度最大差为 1.B 树的维护要求插入和更新节点时,通过 1 次或多次左旋和右旋来满足平衡的条件.二叉查找树是否平衡直接影响了查找需要比较的次数. B+ 树与普通的二叉树不同,它的节点由多个

MySQL存储索引InnoDB数据结构为什么使用B+树,而不是其他树呢?

InnoDB的一棵B+树可以存放多少行数据? 答案:约2千万 为什么是这么多? 因为这是可以算出来的,要搞清楚这个问题,先从InnoDB索引数据结构.数据组织方式说起. 计算机在存储数据的时候,有最小存储单元,这就好比现金的流通最小单位是一毛. 在计算机中,磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/EXT4)的最小单元是块,一个块的大小是4k,而对于InnoDB存储引擎也有自己的最小储存单元,页(Page),一个页的大小是16K. 下面几张图可以理解最小存储

B+树在mysql数据库索引中的使用

一:B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树. ⑵若根结点不是叶子结点,则至少有两棵子树. ⑶除根结点之外的所有非叶结点至少有[m/2] 棵子树: ⑷所有的非终端结点中包含以下信息数据:(n,A0,K1,A1,K2,-,Kn,An) 其中:n 为关键码的个数,Ki(i=1,2,-,n)为关键码且Ki<Ki+1,Ai 为指向子树根结点的指针(i=0,1,-,n),且指针Ai-1 所指子树

mysql高效索引之覆盖索引

概念 如果索引包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index),也就是平时所说的不需要回表操作 判断标准 使用explain,可以通过输出的extra列来判断,对于一个索引覆盖查询,显示为using index,MySQL查询优化器在执行查询前会决定是否有索引覆盖查询 注意 1.覆盖索引也并不适用于任意的索引类型,索引必须存储列的值 2.Hash 和full-text索引不存储值,因此MySQL只能使用B-TREE 3.并且不同的存储引擎实现覆盖索引都是不同的 4.并

关于mysql的索引

我们先来了解MYSQL索引的概念: 索引是一种特殊的文件,他们包含着对数据表里所有记录的引用指针.更通俗地说,数据库索引好比是是一本书前面的目录,能加快数据库的查询速度,我们有了相应的索引后,数据库会直接在索引中查找符合条件的选项.索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了,聚簇索引能提高多行检索的速度,而非聚簇索引对单行的检索很快. mysql主要有两种结构:B+树和hash hash索引在mysql中较少用,它以把数据的索引以hash形

MySQL中索引和优化的用法总结

1.什么是数据库中的索引?索引有什么作用? 引入索引的目的是为了加快查询速度.如果数据量很大,大的查询要从硬盘加载数据到内存当中. 2.InnoDB中的索引原理是怎么样的? InnoDB是Mysql的默认存储引擎,InnoDB有两种索引:B+树索引和哈希索引,其中哈希索引是自适应性的,存储引擎会根据表的使用情况,自动创建哈希索引,不能人为的干涉. B树.B-树.B+树.B*树四种数据结构在索引中的运用,这四种数据结构的顺序必须是这样的.分别阐述如下: B树:二叉树,每个结点只存储一个关键字,等于

MySQL的索引优化,查询优化

MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图. MySQL逻辑架构,来自:高性能MySQL MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理.授权认证.安全等功能均在这一层处理. MySQL大多数核心服务均在中间这一层,包括查询解析.分析.优化.缓存.内置函数(比如:时间.数学.加密等函数).所有的跨存储引擎的功能也在这一层实现:存储过程.触发器.视图等.

mysql 不同索引的区别和适用情况总结

MySQL目前主要有以下几种索引类型: 普通索引 INDEX 允许出现相同的索引内容 (normal) 唯一索引 UNIQUE 不可以出现相同的值,可以有NULL值 主键索引 PROMARY KEY 不允许出现相同的值(唯一性,且只能有一个) 组合索引 实质上是将多个字段建到一个索引里,列值的组合必须唯一 全文索引 FULLTEXT INDEX 可以针对值中的某个单词,但效率低(不建议,可利用添加关键词关联列来实现) //建表时建立CREATE TABLE table_name[col_name

MySQL(Innodb)索引的原理

引言 回想四年前,我在学习mysql的索引这块的时候,老师在讲索引的时候,是像下面这么说的 索引就像一本书的目录.而当用户通过索引查找数据时,就好比用户通过目录查询某章节的某个知识点.这样就帮助用户有效地提高了查找速度.所以,使用索引可以有效地提高数据库系统的整体性能. 嗯,这么说其实也对.但是呢,大家看完这种说法,其实可能还是觉得太抽象了!因此呢,我还想再深入的细说一下,所以就有了此文!需要说明的是,我说的内容只在Mysql的Innodb引擎中是成立的.在Sql Server.oracle.M