B+/-Tree原理(mysql索引数据结构)
B+/-Tree原理
B-Tree介绍
B-树的特性:
1.关键字集合分布在整颗树中;
2.任何一个关键字出现且只出现在一个结点中;
3.搜索有可能在非叶子结点结束;
4.其搜索性能等价于在关键字全集内做一次二分查找;
5.自动层次控制;
B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为空,或已经是叶子结点;
B+Tree介绍
3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);
B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找;
1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;
3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;
mysql中的索引
MySQL中普遍使用B+Tree做索引,但在实现上又根据聚簇索引和非聚簇索引而不同。
聚簇索引
非聚簇索
非聚簇索引就是指B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。主索引和辅助索引没啥区别,只是主索引中的key一定得是唯一的。主要用在MyISAM存储引擎中,如下图:
非聚簇索引比聚簇索引多了一次读取数据的IO操作,所以查找性能上会差。
MyisAM索引与InnoDB索引相比较
- MyisAM支持全文索引(FULLTEXT)、压缩索引,InnoDB不支持;
- InnoDB支持事务,MyisAM不支持;
- MyisAM顺序储存数据,索引叶子节点保存对应数据行地址,辅助索引很主键索引相差无几;InnoDB主键节点同时保存数据行,其他辅助索引保存的是主键索引的值;
- MyisAM键值分离,索引载入内存(key_buffer_size),数据缓存依赖操作系统;InnoDB键值一起保存,索引与数据一起载入InnoDB缓冲池;MyisAM主键(唯一)索引按升序来存储存储,InnoDB则不一定
- MyisAM索引的基数值(Cardinality,show index 命令可以看见)是精确的,InnoDB则是估计值。这里涉及到信息统计的知识,MyisAM统计信息是保存磁盘中,在alter表或Analyze table操作更新此信息,而InnoDB则是在表第一次打开的时候估计值保存在缓存区内;
- MyisAM处理字符串索引时用增量保存的方式,如第一个索引是‘preform’,第二个是‘preformence’,则第二个保存是‘7,ance’,这个明显的好处是缩短索引,但是缺陷就是不支持倒序提取索引,必须顺序遍历获取索引
为什么选用B+/-Tree
写内存时,系统将要写入的数据和单元地址分别放到数据总线和地址总线上,内存读取两个总线的内容,做相应的写操作。
B+Tree:非叶子节点只存key,大大滴减少了非叶子节点的大小,那么每个节点就可以存放更多的记录,树更矮了,I/O操作更少了。所以B+Tree拥有更好的性能。
转载于:https://www.cnblogs.com/xuxinstyle/p/9684803.html
B+/-Tree原理(mysql索引数据结构)相关推荐
- MySQL索引数据结构二叉树、红黑树、B-Tree、B+Tree、Hash
索引:帮助MySQL高效获取数据的有序的数据结构. 假设我们有一张表table,包含Clo1和Clo2两个字段 内存地址 Clo1 Clo2 0x07 1 36 0x5A 2 20 0x7A 3 80 ...
- Mysql索引数据结构有多个选择,为什么一定要是B+树呢?_面试 (MySQL 索引为啥要选择 B+ 树)
Mysql索引数据结构 下面列举了常见的数据结构 二叉树 红黑树 Hash表 B-Tree(B树) Select * from t where t.col=5 我们在执行一条查询的Sql语句时候,在数 ...
- 【肝帝一周总结:全网最全最细】☀️Mysql 索引数据结构详解与索引优化☀️《❤️记得收藏❤️》
[肝帝一周总结:全网最全最细]☀️Mysql 索引数据结构详解与索引优化☀️<❤️记得收藏❤️> 目录
- MySQL索引数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- mysql索引数据结构图解_深入理解Mysql索引底层数据结构与算法
索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构. Q1:大家使用索引有没有想过这个问题?为什么索引能够帮助mysql高效获取数据?我一一给大家道来!在给大家讲之前,先更大家分享一 ...
- mysql索引数据结构图解_干货:mysql索引的数据结构
索引 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 我们知道,数据库查询是数据库的最主要功能之一.我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计 ...
- MySQL事务、MySQL索引、MySQL索引数据结构详解
事务 DDL : 操作表,库 DCL : 授权 DML : 增删改数据 DQL : 查询 TCL : 数据库事务语言 #前期准备 CREATE TABLE account( #账户 id INT PR ...
- mysql id自动递增两个_浅析Mysql索引数据结构演变,让你一看就懂
前言 相信小伙伴应该都用到过mysql数据库,在mysql数据库中,为了提升查询效率,都会使用到索引技术.今天老顾就来介绍一下mysql索引的数据结构的演变. 数据查询 我们来看一下有个用户表,存放这 ...
- 1万条数据大概占多大空间_Java互联网架构-性能优化Mysql索引数据结构详解
欢迎关注头条号:java小马哥 周一至周日下午三点半!精品技术文章准时送上!!! 精品学习资料获取通道,参见文末 一,索引数据结构红黑树,Hash,B+树详解 索引是帮助MySQL高效获取数据的排好序 ...
- 一文说清MySQL索引数据结构
前言 接上篇说到,小A匆匆忙忙的赶回宿舍,因为晚上他要给女神整理讲解MySQL中索引数据结构资料.一边整理一边忍住不笑了起来,等小美看到这篇文章不得爱上自己.当上小美男朋友,从此踏上人生巅峰不是梦(该 ...
最新文章
- RabbitMQ 入门系列(10)— RabbitMQ 消息持久化、不丢失消息
- 编译GCC4.8.2
- SAP RETAIL 参考PO创建分配表之二
- android相对布局底部对齐,Android,在edittext中输入时防止相对布局底部对齐的按钮向上移动...
- sql,nolock
- 详细介绍Linux硬盘挂载步骤
- python哪个方向最缺人赚钱最多?如何在短时间内月入10000以上
- 彻底理解链接器:二,符号决议
- 《SQL Server 2008从入门到精通》--20180703
- CSDN极客头条使用指南
- 压力传感器的误差补偿
- SF20 | 来聊聊平仓离场的方法,如何构建高效,灵活,可靠的出场策略?
- maven中resource配置详解
- C语言操作Excel表格
- 中国双酚F树脂市场趋势报告、技术动态创新及市场预测
- 启动记事本后在任务栏可以看到它,但是却没有在桌面窗口显示的问题
- 数值分析——曲线拟合的最小二乘法
- 怎么在mysql中创建用户名和密码是什么_mysql中怎么创建用户名和密码
- HIve窗口函数之CUME_DIST,PERCENT_RANK
- SpringBoot OSS实战之用户头像上传