1、认识MySQL存储引擎吗?

目录

1、MySQL存储引擎有哪些?

2、默认的存储引擎是哪个?

3、InnoDB和MyISAM有什么区别吗?

3.1、关于事务

3.2、关于行级锁

3.3、关于外键支持

3.4、关于是否支持MVCC

3.5、关于数据安全恢复

3.6、关于索引

3.7、关于性能

4、如何选择MyISAM和InnoDB?

5、小结


1、MySQL存储引擎有哪些?

MySQL支持多种存储引擎,其中最常用的有InnoDB、MyISAM。我们可以通过show engines来查看当前数据库所支持的存储引擎。

2、默认的存储引擎是哪个?

使用show engines可以看到默认的存储引擎是InnoDB。其实MySQL 5.5版本之前,使用MyISAM作为默认的存储引擎,5.5版本之后采用InnoDB作为默认存储引擎。

除了show engines查看存储引擎外,还可以show variables like '%engine%'命令查看MySQL当前默认的存储引擎。

InnoDB存储引擎官方文档:MySQL :: MySQL 8.0 Reference Manual :: 17 The InnoDB Storage Engine

3、InnoDB和MyISAM有什么区别吗?

首先,所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务。除了事务属性外,还有其他不一样的地方。

3.1、关于事务

InnoDB支持事务,MyISAM不提供事务支持。InnoDB 实现了 SQL 标准,定义了四个隔离级别,具有commit和rollback事务的能力。InnoDB 默认使用的REPEATABLE-READ(可重复读)隔离级别是可以解决幻读问题发生的。

3.2、关于行级锁

InnoDB支持行级锁和表级锁,默认为表级锁。MyISAM只支持表级锁。正是由于MyISAM只支持表级锁,因此他在并发时的写性能要远远低于InnoDB。

3.3、关于外键支持

InnoDB大家都知道是支持外键的,但MyISAM不支持。外键可以增加数据的约束性,保证数据强一致性,但是在性能上会有一些损耗。

3.4、关于是否支持MVCC

由于MyISAM不支持行级锁,因此肯定不支持MVCC,InnoDB采用MVCC来支持高并发,并实现了四个标准的隔离级别。默认级别是REPEATABLE-READ(可重复读),并且通过间隙锁策略防止幻读的出现。

3.5、关于数据安全恢复

借助于redo log,InnoDB支持数据安全恢复。即当数据库出现异常崩溃后,重新启动时会保证数据库恢复到崩溃前的状态。而MyISAM不支持。

3.6、关于索引

众所周知,InnoDB使用的是B+Tree作为索引结构,类似的MyISAM也是使用的B+Tree。但是InnoDB,其数据文件本身就是索引文件。而MyISAM中,索引文件和数据文件是分离的,其表数据文件本身是按B+Tree组织的一个索引结构,树的叶子节点保存了完整的数据记录。

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

InnoDB是基于聚簇索引建立的,聚簇索引堆逐渐查询有很高的性能,不过他的二级索引(非主键索引)中必须包含主键列,所以如果主键很大的话,其他的所有索引都会很大。因此,如果表上的索引较多,主键应该尽可能小。

3.7、关于性能

MyISAM由于引擎设计简单,数据以紧密格式进行粗出,所以在某些场景下性能很好。但是其典型的问题还是表锁的问题,由于不支持行级锁,所有的查询都会进行锁表(读表时加共享锁,写表时加排他锁)而长期处于Locked状态。在CPU多核心数的加持下,由于InnoDB支持行级锁,其并发读写能力呈线性增长。MyISAM不支持并发,所以他的处理能力在CPU多核心数下显得心有余力不足。

4、如何选择MyISAM和InnoDB?

大多数情况下,InnoDB都是正确的选择,所以Oracle在MySQL 5.5版本时终于将InnoDB作为默认的存储引擎了。

在《高性能MySQL》一书上提到“除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎”。如要用到全文索引,建议优先考虑InnoDB加上Sphinx的组合,而不是直接考虑使用支持全文索引的MyISAM。

如果实在不得已需要使用不同的存储引擎,最好优先考虑以下几个因素:

  1. 事务:应用是否需要支持事务。如果应用需要支持事务,InnoDB则是目前已知的最稳定并且经过验证的选择。如果不需要支持事务,且以select和insert操作为,那么MyISAM也是不错的选择,如日志系统等。
  2. 备份:数据是否需要备份。如果系统坏允许关闭服务进行备份,那么这个因素可以忽略。但是如果需要在线热备份,则选择InnoDB是基本要求了。
  3. 崩溃恢复:数据较大时,系统崩溃后快速恢复是需要考虑的问题。相比之下MyISAM比InnoDB崩溃后发生数据损坏的概率要高很多,且恢复速度也要慢很多。
  4. 特有的特性:有时,应用可能以来一些粗出引擎所特有的特性或优化。比如应用依赖聚簇索引的优化。但是,现实情况是,如今项目你几乎找不到任何理由再使用MyISAM来替代InnoDB了。

5、小结

最后,总结一下两者的差异:

  • InnoDB支持事务,MyISAM不支持事务
  • InnoDB支持行级锁和表锁,MyISAM只支持表锁
  • InnoDB支持外键,MyISAM不支持
  • InnoDB支持MVCC,MyISAM不支持
  • InnoDB支持热备份,数据崩溃后恢复,MyISAM不支持
  • InnoDB性能比MyISAM高上许多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/522909.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

藏不住了!这20个技术点是运维老手的秘密武器

你们好,我的网工朋友。 信息技术系统的正常运行直接关系到企业或生产的正常运行。 然而,网工经常面临以下问题:网络速度慢、设备故障和应用系统效率低。 任何信息技术系统的故障,如果不及时处理,都会产生很大的影响…

sa-token非Web上下文无法获取Request

0x02 非Web上下文无法获取Request 问题定位 在我们使用sa-token安全框架的时候,有时候会提示:SaTokenException:非Web上下文无法获取Request 错误截图: 在官方网站中,查看常见问题排查: 非Web上下文无法获取Reques…

Peter算法小课堂—线性dp

今天,你读完这篇文章,普及组的动态规划已经可以秒了。 最长公共子序列 求两个数列的最长公共子序列(Longest Common Subsequence,LCS)的长度。 数列 X 和 Y 的最长公共子序列 Z,是指 Z 既是 X 的子序列&…

南京观海微电子---Vitis HLS中数据类型定义——Vitis HLS教程

1. 传统C语言支持的数据类型 其中要说明的是,Vitis HLS不支持“char16_t”以及“char32_t”这两种数据类型。 2. HLS引入了任意精度的数据类型 2. 1 为何要使用任意精度的数据类型 C语言的原生数据类型都是基于8bit为边界的(比如8、16、32、64bits&…

OCP Java17 SE Developers 复习题11

答案 A, C, D, E. A method that declares an exception isnt required to throw one, making option A correct. Unchecked exceptions can be thrown in any method, making options C and E correct. Option D matches the exception type declared, so its also correct…

Android Glide

1.引入glide implementation com.github.bumptech.glide:glide:4.14.2 // Skip this if you dont want to use integration libraries or configure Glide. annotationProcessor com.github.bumptech.glide:compiler:4.14.2 //Glide 注解处理器 2.AndroidManifest.xml 中添加…

JVM 全景图

今天我重新复习了一下 jvm 的一些知识点。我以前觉得 jvm 的知识点很多很碎,而且记起来很困难,但是今天我重新复习了一下,对这些知识点进行了简单的梳理之后,产生了不一样的看法。虽然 jvm 的知识点很碎,但是如果你真的…

C# Web应用调用EXE文件的一些实践

目录 需求 范例运行环境 可执行文件的设计 调用可执行文件方法 RunExecuteFile RunShellExecuteFile 方法的区别 WEB调用举例 小结 需求 最近同事使用Python开发了一款智能文字转语音的程序,经讨论部署在WINDOWS环境服务器下,因此需要生成目标…

【御控物联】JavaScript JSON结构转换(19):数组To对象——规则属性重组

文章目录 一、JSON结构转换是什么?二、术语解释三、案例之《JSON数组 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

python画带阴影折线图

(1) # codinggbk import matplotlib.pyplot as plt import numpy as np# 创建一些示例数据 x np.linspace(-3, 3, 60) y_mean np.sin(x) y_std np.sin(x)# 画折线图 b-:蓝色实线 plt.plot(x, y_mean, b-, labelMean)# 填充阴影表示标准差 alpha…

机场新篇章:3D可视化技术引领航空智慧时代

在科技日新月异的今天,3D可视化技术正逐步渗透到我们生活的方方面面,为各行各业带来了前所未有的变革。3D可视化技术以其独特的魅力和实用性,正逐渐成为航空领域的新宠,引领着航空业迈向更加智能化、高效化的未来。 机场作为连接世…

OCm (Radeon Open Compute) 和 CUDA (Compute Unified Device Architecture)

OCm(Radeon Open Compute)和CUDA(Compute Unified Device Architecture)是两种旨在利用图形处理单元(GPU)进行通用计算的技术和框架。 OCm(Radeon Open Compute): OCm&…

MS9740B进行DUT插入损耗的评估,操作步骤?

使用MS9740B进行DUT(设备待测)插入损耗的评估,首先需要了解MS9740B的基本功能和配置。MS9740B是一款高精度光谱分析仪,支持多种光纤类型,包括SM光纤(ITU-T G.652)和GI光纤(50μm/125…

JavaScript - 你都知道哪些常用的HTTP状态码,他们的含义是什么

难度级别:中级及以上 提问概率:50% 目录 200 301 302 304 400 401 403 404

css- 4

1.浮动 1. 浮动最初用于实现文字环绕效果 2. 现在,浮动是主流的布局方式之一 1.1元素浮动之后的特点 元素浮动之后,称为浮动元素,具有如下特点: 1. 浮动元素脱离文档流 2. 多个浮动的元素会水平排列,一行放不下自动换…

RK3568 学习笔记 : 独立修改与编译 u-boot

前言 开发板:【正点原子】ATomPi-CA1 开发板,配置:RK3568,4GB DDRAM 64GB emmc 开发板资料给了 u-boot 与 Linux kernel 源码,尝试手动编译。 本篇记录 收到编译 RK3568 平台 u-boot 的方法 环境搭建 由于 RK 平台…

穿越代码之海:探寻结构体深层逻辑,展望未来应用新天地

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 结构体作为一种数据结构,其定义和特点决定了它在各种应用中的广泛适用性。随着科技的进步和新兴行业的不断涌现&#xf…

2024年选择云渲染平台必须注意这5点!看完你就懂了

云渲染平台这么多,你是不是正在为选择哪一家而困惑? 随着云渲染技术的进一步发展,市面上的云渲染平台也越来越多,其中鱼龙混杂的也不在少数。对于设计师和设计公司来说,如何选择一个可靠且适合自己的云渲染平台成为一…

【ZIP技巧】ZIP分卷压缩包如何合并为一个?

通常,ZIP压缩文件文件体积过大的时候,大家可能都会选择“分卷压缩”来压缩ZIP文件,但是你是否遇到过需要将分卷压缩的文件合并回一个完整zip文件的情况?今天我们分享两个ZIP分卷压缩包合并的方法给大家。 方法一: 我…

java之static详细总结

static也叫静态,可以修饰成员变量、成员方法。 成员变量 按照有无static分为两种: 类变量:static修饰,属于类,与类一起加载一次,在内存中只有一份,会被类的全部对象共享实例变量(…