MySQL引擎之MyISAM,InnoDB,Btree与B+tree
目录:
- MyISAM与InnoDB模块
- Btree模块
- B-tree与哈希索引的区别
一:MyISAM:
- tb_demo.frm,存储表定义; 2.tb_demo.MYD,存储数据; 3.tb_demo.MYI,存储索引。
- 因为MyISAM表有无法处理事务,所以它只适合在以下情况下使用
- 1.选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
- 2.插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。
二:InnoDB:
- 更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
- 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
- 自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
- 外键约束。MySQL支持外键的存储引擎只有InnoDB。
- 支持自动增加列AUTO_INCREMENT属性。
三. Innodb与MyIASM引擎的区别与应用场景
1. Innodb与MyIASM引擎的区别
(3)select ,update ,insert ,delete 操作:
MyIASM:如果执行大量的SELECT,MyISAM是更好的选择。
InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。
(4)查询表的行数不同:
- MyIASM:select count() from table,MyISAM只要简单的读出保存好的行数,注意的是,当count()语句包含 where条件时,两种表的操作是一样的。
- InnoDB : InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。
(5)外键支持:
- mysiam表不支持外键,而InnoDB支持。
2.为什么MyIASM会比Innodb 的查询速度快
- InnoDB在做SELECT的时候,要维护的东西比MyIASM引擎多很多;
- 数据块,INNODB要缓存,MyIASM只缓存索引块, 这中间还有换进换出的减少;
- innodb寻址要映射到块,再到行,MyIASM记录的直接是文件的OFFSET,定位比INNODB要快;
- INNODB还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护。
- MVCC ( Multi-Version Concurrency Control )多版本并发控制 。
MyIASM适合:(1)做很多count 的计算;(2)插入不频繁,查询非常频繁;(3)没有事务。
InnoDB适合:(1)可靠性要求比较高,或者要求事务;(2)表更新和查询都相当的频繁,并且行锁定的机会比较大的情况。
四. Btree与b+tree
1. Btree:
B-tree是一种多路自平衡搜索树,它类似普通的二叉树,但是Btree允许每个节点有更多的子节点。Btree示意图如下:
B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;
如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树结构(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销;
右边也是一个B树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的树结构索引;所以,使用B树还要考虑尽可能让B树保持左图的结构,和避免右图的结构,也就是所谓的“平衡”问题;
实际使用的B树都是在原B树的基础上加上平衡算法,即“平衡二叉树”;如何保持B树结点分布均匀的平衡算法是平衡二叉树的关键;平衡算法是一种在B树中插入和删除结点的策略;
由上图可知 Btree 的一些特点:
2. B+tree:
1.其定义基本与B-树同,除了:2.非叶子结点的子树指针与关键字个数相同;3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);5.为所有叶子结点增加一个链指针;6.所有关键字都在叶子结点出现;
1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;2.不可能在非叶子结点命中;3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;4.更适合文件索引系统;
btree和B+tree的区别:
B*Tree:
是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针;
- B*树定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3(代替B+树的1/2);
- B+树的分裂:当一个结点满时,分配一个新的结点,并将原结点中1/2的数据复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂只影响原结点和父结点,而不会影响兄弟结点,所以它不需要指向兄弟的指针;
- B*树的分裂:当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针;
- 所以,B*树分配新结点的概率比B+树要低,空间使用率更高;
三. B-tree与哈希索引的区别
1)B+tree的索引:
2)Hash索引:
来源:https://blog.csdn.net/longlong6682/article/details/104805941
MySQL引擎之MyISAM,InnoDB,Btree与B+tree相关推荐
- MySQL存储引擎:MyISAM InnoDB
存储引擎 现实生活中我们用来存储数据的文件应该有不同的类型:比如存文本用txt类型,存表格用excel,存图片用png等.数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制, ...
- Mysql引擎之MyISAM引擎
MyISAM做为Mysql的默认引擎,在性能与特征之间,MyISAM提供一种良好的平衡,这特征包括全文检索(Full-Text Indexing).压缩.空间函数(GIS).但MyISAM不支持事务和 ...
- MySQL引擎:MyIsam和Innodb的区别
InnoDB: 定义: InnoDB是一个事务型的存储引擎,有行级锁定和外键约束.Innodb引擎提供了对数据库 ACID事务的支持,并且实现了SQL标准的四种隔离级别,该引擎还提供了行级锁和外键约束 ...
- MySQL的索引存储数据结构BTree和B+Tree的区别
文章目录 BTree 原理示意图 B+Tree 原理示意图 B+Tree的树层级很少 B+Tree 可以高效支持范围查找 BTree 原理示意图 注:BTree 就是 B-Tree,实际上官方并没有 ...
- 【整理】MySQL引擎
MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型IN ...
- MySQL引擎和区别
目录 1.MySQL引擎 2.InnoDB 3.Mylsam 3.InnoDB和Mylsam的区别: 1.MySQL引擎 MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种 ...
- mysql介绍(myisam)
mysql引擎 常用的mysql引擎有myisam.innodb.很多人不知道还有 Memery ,Archive,Ndb等 在这里详细介绍myisam的特性 下表是MyISAM 的功能 每个myis ...
- MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)
MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎 1.存储引擎其实就是如何实现存储数据 ...
- MySQL 两种存储引擎:MyISAM与InnoDB对比及理解
MySQL 两种存储引擎:MyISAM与InnoDB对比及理解 目前MySQL默认的存储引擎是InnoDB 现在大多数时候我们使用的都是InnoDB存储引擎,但是在某些情况下使用MyISAM更好,比如 ...
最新文章
- R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(水平带状图、垂直带状图、抖动程度配置)实战
- Android之linux基础教学之六 异常
- oracle ipc message,【案例】Oracle RAC IPC send timeout error导致RAC的节点挂起解决办法
- c语言如何如何入门,程序员C语言新手如何入门?
- android 有值代码,Android:如何在代码中获取“listPreferredItemHeight”属性的值?
- 解耦与人类行为 (完整)
- linux_scp 远程复制不需要输入密码
- 用Python快速找到出现次数最多的数据
- 质量标准、质量策略和质量责任的概念解释
- matlab 钻石绘制,用MATLAB代码模拟大雕和钻石人单挑
- jQuery微博登录
- [转载] 七龙珠第一部——第114话 悟空的愿望 卡林大人好为难
- Unity热更之旧项目救星——Xlua热补丁修复
- css实现方框内打勾
- 环境配置 python 3.6+Anaconda+cuda9.0+cudNN7.0+Tensorflow
- activities工作流入门笔记-001-建表
- python判断手机号运营商_如何判断手机号的运营商那?
- Qt pro 文件详解
- 阿里云视频点播指定清晰度
- Python字体成灰色有波浪号
热门文章
- django前后端结合_简单4步用FLASK/Django部署你的Pyecharts项目
- python 将图片转换成像素画_Canvas 实现位图转像素画
- gitlab 开源项目 星_49必须了解的机器学习开源项目,Github上平均3600星
- 「Github」Linux/Ubuntu下终端Github教程与手册
- Spark自带的集群模式(Standalone),Spark/Spark-ha集群搭建
- HDFS的工作机制,HDFS写数据流程,HDFS读数据流程(来自学习资料)
- HDFS的API调用,创建Maven工程,创建一个非Maven工程,HDFS客户端操作数据代码示例,文件方式操作和流式操作
- JNI方面的笔记(未完待续)
- Oracle中管理用户(创建用户,用户加锁,用户解锁,修改用户密码,授权登录权限,撤销登录权限,授权连接权限,conn命令,创建角色,并为角色赋权限,将角色赋给指定用户)
- caffe.pb.h丢失问题: