当前位置: 首页 > 编程日记 > 正文

浅谈MySQL存储引擎-InnoDBMyISAM

浅谈MySQL存储引擎-InnoDB&MyISAM

存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取。MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的。每一种存储引擎都有它的优势和劣势,本文只讨论最常见的InnoDB和MyISAM两种存储引擎进行讨论。本文中关于数据存储形式和索引的可以查看图解MySQL索引

MySQL逻辑架构图:

InnoDB存储引擎#

InnoDB是默认的事务型存储引擎,也是最重要,使用最广泛的存储引擎。在没有特殊情况下,一般优先使用InnoDB存储引擎。

1️⃣、数据存储形式

使用InnoDB时,会将数据表分为.frm 和 idb两个文件进行存储。

2️⃣、锁的粒度

InnoDB采用MVCC(多版本并发控制)来支持高并发,InnoDB实现了四个隔离级别,默认级别是REPETABLE READ,并通过间隙锁策略防止幻读的出现。它的锁粒度是行锁。【通过MVCC实现,MVCC在稍后会进行介绍】

3️⃣、事务

InnoDB是典型的事务型存储引擎,并且通过一些机制和工具,支持真正的热备份。

4️⃣、数据的存储特点

InnoDB表是基于聚簇索引(另一篇博客有介绍)建立的,聚簇索引对主键的查询有很高的性能,不过他的二级索引(非主键索引)必须包含主键列,索引其他的索引会很大。

MyISAM存储引擎#

1️⃣、数据存储形式

MyISAM采用的是索引与数据分离的形式,将数据保存在三个文件中.frm.MYD,.MYIs。

2️⃣、锁的粒度

MyISAM不支持行锁,所以读取时对表加上共享锁,在写入是对表加上排他锁。由于是对整张表加锁,相比InnoDB,在并发写入时效率很低。

3️⃣、事务

MyISAM不支持事务。

4️⃣、数据的存储特点

MyISAM是基于非聚簇索引进行存储的。

5️⃣、其他

MyISAM提供了大量的特性,包括全文索引,压缩,空间函数,延迟更新索引键等。

进行压缩后的表是不能进行修改的,但是压缩表可以极大减少磁盘占用空间,因此也可以减少磁盘IO,从而提供查询性能。

全文索引,是一种基于分词创建的索引,可以支持复杂的查询。

延迟更新索引键,不会将更新的索引数据立即写入到磁盘,而是会写到内存中的缓冲区中,只有在清除缓冲区时候才会将对应的索引写入磁盘,这种方式大大提升了写入性能。

三、对比与选择#

两种存储引擎各有各的有点,MyISAM专注性能,InnoDB专注事务。两者最大的区别就是InnoDB支持事务,和行锁。

如何在两种存储引擎中进行选择?

① 是否有事务操作?有,InnoDB。

②是否存储并发修改?有,InnoDB。

③是否追求快速查询,且数据修改较少?是,MyISAM。

④是否使用全文索引?如果不引用第三方框架,可以选择MyISAM,但是可以选用第三方框架和InnDB效率会更高。

四、浅谈MVCC#

MySQL大多数事务型存储引擎实现的都不是简单的行锁。基于提升并发性能的考虑,他们一般都同时实现了多版本并发控制(MVCC)。

可以认为MVCC是行级锁的一个变种,它能在大多数情况下避免加锁操作,因此开销更低。无论怎样实现,它们大豆实现了非阻塞的读操作,写操作也只锁定制定的行。

MVCC是通过保存数据在某一个时间点的快照来实现的,也就是说无论事务执行多久,每个事务看到的数据都是一致的。InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现,这两个列一个保存了行的创建时间,一个保存了行的过期时间(或删除时间),当然,并非存储的是时间,而是系统版本号。每开启一个事务,版本号都会递增,事务开始时刻的系统版本号会作为事务的版本号。

idname创建时间(行版本号)删除时间(删除版本号)
1Mary1null
2Jann1null

以InnoDB存储引擎的的REPEATABLE READ隔离级别来说:

SELECT

​ ①只查询创建时间版本号小于当前事务版本号的数据行(保证事务读取的行要么在事务开始之前就存在,要么是事务本身插入的行)

​ ②行的删除版本号要么未定义,要么大于当前事务版本号,这样可以确保事务读取到的行,在开始事务之前未被删除

只有复合上诉两个条件的记录才会作为结果返回

INSERT

​ 为插入的数据保存当前系统版本号作为行版本号

DELETE

​ 保存当前系统版本号作为删除行版本号

UPDATE

​ 插入一行数据,并将当前系统版本号赋予行版本号;同事保存当前系统版本号到原来的行作为删除版本号。

注:MVCC只在REPEATABLE和READ COMMITTED两个隔离级别下才能正常工作。
我的个人博客:李强的个人博客(基于SSM,Nginx+Redis的后台架构)

相关文章:

android ValueAnimator学习

2019独角兽企业重金招聘Python工程师标准>>> 一、简介 This class provides a simple timing engine for running animations which calculate animated values and set them on target objects. There is a single timing pulse that all animations use. It runs …

Annotation

在进行类或方法定义的时候,都可以使用一系列的Annotation(public interface Annotation)进行声明,如果想要获取这些Annotation的信息,可以直接通过反射来完成。在 java.lang.reflect 里面有一个AccessibleObject类&…

GSG灰猩猩插件合集包

GSG灰猩猩插件合集包 GSG灰度大猩猩Plus中心插件HDRI和材料2021年 大小:59G 信息: 云桥网络 平台获取素材 这是最新的(截至2021年4月29日)GSG Plus HUB,包括Plus订阅的所有插件、材料和HDRIs。 支持c4d版本:R23、S24(仅限Windows) 该包包含最新的GS…

百度地图JavaScript API自定义覆盖物、自定义信息窗口增删时的显示问题

项目中,需求:在百度地图上实时画出车辆,并能点击车辆弹出信息框查看实时信息。 实现:通过不停的画覆盖物并删除掉。点击覆盖物时弹出信息窗口。 问题:删除掉覆盖物后信息窗也删除掉了。因为信息窗是建立在覆盖物的基础…

英语计算机工程师求职信,电脑工程师的英文求职信样文

电脑工程师的英文求职信样文应届毕业生推荐是电脑工程师的英文求职信样文Dear Ms. Swainsforth:I am a registered engineer in the state of Michigan, and I am presently seeking a position in the roofing industry. A copy of my resume is enclosed, and I would like t…

java工程webservice的应用案例

在java项目中使用webservice 今天学习webservice,主要参考了网络上的一些文章。 1.关于原理的介绍:个人认为这篇文章写得不错了,戳这里。 2.关于demo的编写:个人认为这篇文章很简洁,也能运行成功,戳这里…

Vijos1683 有根树的同构问题

题目大意: 给出一堆树,求同构(拓扑结构相同)树的集合思路: 一开始写了个前序求置换序列,然后对比后序是否相等,但wa了,还需要对子树进行排序输出其dfs序,但是直接输出按节点多少排序的序列太复杂,于是将一个节点的dfs抽象成\(()\),于是对树\(1 -> 2 , 1 -> 3\)输出的dfs序…

3D广告建模-C4D Octane渲染视频教程

3D广告建模-C4D Octane渲染视频教程 时长4h 58m 960X540 MP4 大小解压后:833M 语言:英语中英文字幕(根据原英文字幕机译更准确) 信息: 云桥网络 平台 huo取 教程 C4D中Octane渲染的三维广告建模视频教程 包含字幕 了解如何在…

vue实例没有挂载到html上,vue 源码学习 - 实例挂载

前言在学习vue源码之前需要先了解源码目录设计(了解各个模块的功能)丶Flow语法。src├── compiler # 把模板解析成 ast 语法树,ast 语法树优化,代码生成等功能。├── core # 核心代码 Vue.js 的灵魂├── platforms # 不同平台的支持 web 和 weex├…

为何Redis要比Memcached好用(转)

转载链接:http://blog.csdn.net/renfufei/article/details/40598889 GitHub版本地址: https://github.com/cncounter/translation/blob/master/tiemao_2014/Redis_beats_Memcached/Redis_beats_Memcached.md 副标题: Redis是新兴的通用存储系统,而Memcached仍有其适…

2022-2028年中国数字化制造产业研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国数字化制造行业市场行业相关概述、中国数字化制造行业市场行业运行环境、分析了中国数字化…

转载知乎上的一篇:“ 面向对象编程的弊端是什么?”

2019独角兽企业重金招聘Python工程师标准>>> 弊端是,没有人还记得面向对象原本要解决的问题是什么。1、面向对象原本要解决什么(或者说有什么优良特性)似乎很简单,但实际又很不简单:面向对象三要素封装、继…

Windows Azure 如何学习Azure

通过上一篇博文可以得知,Azure其实是个平台,上面跑的服务五花八门,可以相互分开使用,同时也可以相互结合。 那我们应该如何来学习Azure呢? 其实有很多种选择,正所谓条条大路通罗马, 官方的training kit 提…

最全面的Unity游戏开发指南视频教程 第2卷

最全面的Unity游戏开发指南视频教程 第2卷 流派:电子学习| MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz 语言:英语中英文字幕(根据原英文字幕机译更准确)|大小解压后:4.2 GB |时长:9h 24m 含项目文件 Unity游戏开发…

IOS面试题(二)

50. 谈谈对Block 的理解?并写出一个使用Block执行UIVew动画? 答:Block是可以获取其他函数局部变量的匿名函数,其不但方便开发,并且可以大幅提高应用的执行效率(多核心CPU可直接处理Block指令) 1 2 3 4 5 [UIView transitionWithView:self.…

辽宁省计算机专业A类,辽宁省2008年中职升高职招生考试计算机专业综合试题

辽宁省2008年中职升高职招生考试计算机及应用专业综合课试卷第一部分 必答题(200分)一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案。每小题4分,共44分)1、在数据通信中,将模拟信号变换为数字信号的过程称为A 编码 B解码 C解调…

MyBatis的插入后获得主键的方式

需求&#xff1a; 使用MyBatis往MySQL数据库中插入一条记录后&#xff0c;需要返回该条记录的自增主键值。 方法&#xff1a; 在mapper中指定keyProperty属性&#xff0c;示例如下&#xff1a; <insert id"insertUser" useGeneratedKeys"true" keyP…

JAVA 中 13 种锁的实现方式

分布式系统时代,线程并发,资源抢占,慢慢变得很重要。那么常见的锁都有哪些?

String的Intern()方法,详解字符串常量池!

字符串拼接最好使用StringBuilder调用append来拼接。使用加号“+”拼接,会new一个StringBuilder,并且在最后调用toString方法时还会new String()。内存中由于创建了较多的StringBuilder和String对象,还有一方面是内存占用,调用GC还会额外花费时间。所以,字符串拼接直接使用StringBuilder会大大提高性能,尤其是多个字符串拼接。

硬盘盘符双击无法打开,只能右键打开(解决方法)(转载)

开始---运行---cmd&#xff0c;例如D盘&#xff0c;就输入  D: dir /a &#xff08;没有参数A是看不到的&#xff0c;A是显示所有的意思&#xff09; 此时你会发现一个autorun.inf文件   attrib autorun.inf -s -h -r 去掉autorun.inf文件的系统、只读、隐藏属性&#xff0…

Unity 2021创建2D休闲点击器游戏视频教程

Unity 2021创建2D休闲点击器游戏视频教程 Learn how to create a 2D Idle Clicker Game in Unity 2021 了解如何在Unity 2021中创建2D闲置点击器游戏 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&…

html实现pdf预览打印机,Pdf操作(HTML转PDF,PDF直接网页连接打印机)

Pdf导出的操作&#xff1a;引用TuesPechkin.dll和TuesPechkin.Wkhtmltox.AnyCPU.dll程序集&#xff0c;新建PDF静态类 PDFConverter&#xff0c;在web.config配置保存dir/// ///pdf转换/// public static classPdfConvert {/// ///staticDeploymentPath/// private static read…

CUDA编程遇到的问题

1、总喜欢在core 代码中&#xff0c;访问device memory。 然后排错很久&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 2、第一次cudaMalloc() 耗时很久 3、cudaMalloc对于大数据也耗时很久 4、一致内存使用错误&#xff0c;不知道为什么&#xff01;&#xff…

2022-2028年中国数字化档案加工行业市场深度分析及发展策略分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国数字化档案加工行业市场行业相关概述、中国数字化档案加工行业市场行业运行环境、分析了中…

eclipse打开处于无响应状态解决办法

eclipse打开后处于无响应状态&#xff0c;变没有了反映&#xff0c;并且cup占用率为0。应该是非正常关机导致eclipse工作区的文件状态错误导致。 解决方案&#xff1a;在工作区目录中&#xff0c;有一个.metadata目录&#xff0c;里面是工作区及各插件的信息&#xff0c;删除此…

Unity创建在线多人游戏视频教程

Unity创建在线多人游戏视频教程 Learn To Create An Online Multiplayer Game In Unity 学会在Unity中创建在线多人游戏 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更…

《需求分析》读后感之二

项目的目标是系统的业务需求。在很多情况下&#xff0c;涉众可以清晰地表达出系统的业务需求&#xff0c;这时可以通过安排和涉众的面谈来明确项目的动机。但也有很多情况下&#xff0c;涉众无法表达他们的业务需求&#xff0c;或者表达的业务需求不够清晰。因此&#xff0c;要…

统计学 计算机论文,统计学专业论文范文

1实验教学软件选择 目前流行的统计软件有SAS、SPSS、Statistica、EViews、Excel等&#xff0c;但上述软件的特点和功能优势各不相同&#xff0c;所以要根据学生的专业特点和教学要求选用不同的统计软件或者软件组合。但是由于专业统计软...2019-09-061非统计专业统计学教学过程…

JVM年轻代,老年代,永久代详解​​​​​​​

秉承不重复造轮子的原则&#xff0c;查看印象笔记分享连接↓↓↓↓ 传送门&#xff1a;JVM年轻代&#xff0c;老年代&#xff0c;永久代详解 速读摘要 最近被问到了这个问题&#xff0c;解释的不是很清晰&#xff0c;有一些概念略微模糊&#xff0c;在此进行整理和记录&…

html中#include file的使用方法

有两个文件a.htm和b.htm&#xff0c;在同一文件夹下a.htm内容例如以下 <!-- #include file"b.htm" --> b.htm内容例如以下 今天&#xff1a;雨 31 ℃&#xff5e;26 ℃ <br />明天&#xff1a;雷阵雨 33 ℃&#xff5e;27 ℃ 直接在浏览器中打开a&#…