Mysql存储引擎MyISAM和InnoDB_Ryan_Tang️的博客-程序员秘密

技术标签: mysql  

Mysql索引数据结构–B+Tree

B+ Tree是在B Tree 的基础上做的优化,变化如下:

1、B+ Tree每个节点可以包含更多的节点,这个做的原因有两个,第一个原因是为了降低数的高度,第二个是为了将数据范围化为多个区间,区间越多,索引越快
2、非叶子节点储存Key,叶子节点存储key和数据
3、叶子节点两两指针相互连接(符合磁盘的预读特性),顺序查询性能更高

MyISAM
MyISAM是MySQL默认的存储引擎。MyISAM不⽀持事务、也不⽀持外键,其优势是访问的速度快,对事务完整性没有要求或者以 SELECT、INSERT 为主的应⽤基 本上都可以使⽤这个引擎来创建表。

我们可以进入mysql文件中的data目录,选择一个数据库,查看存储在磁盘上的结构:
在这里插入图片描述
其中 .frm文件存储的是表结构
.MYI文件存储的是表的索引
.MYD文件存储的是数据文件

MyISAM索引文件和数据文件是分离的(非聚集)
可以看下图理解一下:
在这里插入图片描述
其中 Primary Key通过非叶子节点的区间,快速定位到叶子节点,取出value ,这个value就是.MYI中的一条索引数据,再通过这个索引指向的是.MYD的数据,通过一次磁盘IO 定位到那条数据,就去取出那条数据。

InnoDB
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能⼒的事务安全。但是对⽐MyISAM的存储引擎,InnoDB写的处理效率差⼀些,并且会占⽤更多的磁盘空间以保 留数据和索引

我们也可以去查看一下该表是如何存储在磁盘上的
在这里插入图片描述
.frm文件存储的是表结构
.bid文件存储的是索引和数据文件,相互对应的

InnoDB索引文件和数据文件是共同存储在.bid文件里面的(聚集)
可以看下图理解一下:
在这里插入图片描述
其中 Primary Key通过非叶子节点的区间,快速定位到叶子节点,其中叶子节点上存储的是索引+数据。就不需要在想MyISAM那样再进行一次磁盘IO了,直接取出即可。

为什么InnoDB必须要有主键推荐使用整型的自增列呢?
https://blog.csdn.net/a1_HelloWord/article/details/104341349

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45016628/article/details/107057266

智能推荐

初始mqtt服务_banfu1866的博客-程序员秘密

MQTT入门概念mqtt意为消息队列遥测传输,是IBM开发的一个即时通讯协议。由于其维护一个长连接以轻量级低消耗著称,所以常用于移动端消息推送服务开发。协议格式mqtt协议控制报文的格式包含三部分:以固定报头、可变报头和有效载荷,其中固定报文头是所有控制报文都有的,可变报头和有效载荷都是部分控制报文。mqtt是二进制的协议,控制字段是精确到Bit级别的,单纯这一点就足以为其在...

Unity全面的面试题(包含答案)_丁小未的博客-程序员秘密

这个是我刚刚整理出的Unity面试题,为了帮助大家面试,同时帮助大家更好地复习Unity知识点,如果大家发现有什么错误,(包括错别字和知识点),或者发现哪里描述的不清晰,请在下面留言,我会重新更新,希望大家共同来帮助开发者一:什么是协同程序?在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。二:

http://topic.csdn.net/u/20090612/20/258ea941-c80b-47ad-b314-285b82281050.html_JustFromHell的博客-程序员秘密

VC6资源汇集,大部分有效 来自某网友CSDN帖子 vc6.0下载地址2009年02月07日 星期六 10:43   相关资料: 要下载MSDN 2001,请进http://hi.baidu.com/ypxmaomao/blog/item/c1d129b5657794c937d3caf4.html MFC类库详解,中文版:http://hi.baidu.com/ypxmaomao/

gzip压缩JavaScript_weixin_30741653的博客-程序员秘密

gzip压缩JavaScripthttp://www.cnblogs.com/ranzige/p/3851065.html转载于:https://www.cnblogs.com/SZLLQ2000/p/8861643.html

leetcode-22. 括号生成_大灰狼吃树皮的博客-程序员秘密

思路:回溯。getRes(int left,int right,int n,string s):当前状态是有left个左括号,right个右括号,s是当前括号的状态。结束条件:left<right 、left>n、right>n、left==right&&left==n选择列表:getRes(left+1,right,n,s+’(’);getRes(left,right+1,n,s+’)’);class Solution {public: vector&.

poj 3666 Making the Grade (有序序列,离散化dp)_grade 有序参数_lov_vol的博客-程序员秘密

题目链接:点击打开链接         题意:给了一个序列A【1,2,3,....n],通过改变数字使之变成有序序列C[1,2,3,...n],求最小改变量sum|ai-ci| 。         思路:不降序和不升序类似,可以先考虑不降序。可以容易证明最优的方案一定都是有序序列里的数全是原序列中的数。         如: A : 1 5 3 8      C: 1 3 3 8

随便推点

数据库连接超时:“The last packet successfully received from the server was xxx milliseconds ago”_小松猿的博客-程序员秘密

产生的原因:应用方的数据库连接有效期时间,大于数据库自己设置的有效期。解决方案:一、修改druid配置(如果使用druid的话) 1 2 3 4 spring.datasource.druid.validationQuery=select1 spring.datasource.druid.testWhileIdle=true spring.datasource.druid.testOnBorrow=true spr.

【PHP】获取每个月每天的数据,根据时间戳_咔咔-的博客-程序员秘密

author:咔咔wechat:fangkangfk这是数据库 // 获取每日活跃人数 $activeNumber = Db::query("select FROM_UNIXTIME(time,'%Y-%m-%d')as date,COUNT(*) FROM active_number GROUP BY time"); du...

Linux--进程间通信之共享内存_linux 程序合并共享内存_sayhello_world的博客-程序员秘密

1.      什么是共享内存?进程A可以及时看到进程B堆内存中数据的更新。由于多个进程共享一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。有关信号量的更多内容,可以查阅我的前一篇文章:http://blog.csdn.net/sayhello_world/article/details/614228982.      共享内存优缺点:优点:采用共享内存的一份好处是效

分块矩阵在秩不等式中的应用_weixin_34257076的博客-程序员秘密

1. $$r(A+B)\leq r(A)+r(B);\, r(A-B)\leq r(A)+r(B)$$2. $(A-aE)(A-bE)=0$.其中$b-a\neq 0$则$r(A-aE)+r(A-bE)=n$,并且矩阵$A_{n\times n}$可以对角化.证法一:利用第一题.证法二:利用分块矩阵\begin{equation*}\left( \begin{ar...

nginx启动报错:/usr/local/nginx/sbin/nginx: error while loading shared libraries: libcrypto.so.1.1:_启动/usr/local/nginx/sbin/nginx报错_假书生@的博客-程序员秘密

在CentOS7下配置Nginx,但是一致都在报错。报错信息为:./nginx: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory如下图所示:首先检测原因所在,通过下面的命令行检测:ldd $(which /usr...

mapbox-gl加载超图iserver发布切片_tileimage转zxytileimage_GIS技术杂谈的博客-程序员秘密

如何在mapbox-gl加载超图iserver发布的切片数据。超图isever发布数据的形式,跟arcgis server发布的有些不同,在加载时,也有一定的区别,超图在线可测试地图数据网址如下:http://support.supermap.com:8090/iserver/services/map-world/rest/maps/World支持操作如下截图:mapbox-gl加载iserver发布的切片数据,可以采取以下几种方式:tileFeature 矢量切片形式tileImage