当前位置: 首页 > news >正文

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高上许多
http://www.lryc.cn/news/333718.html

相关文章:

  • 微信小程序媒体查询
  • 前端(动态雪景背景+动态蝴蝶)
  • 软考-系统集成项目管理中级-新一代信息技术
  • 【卷积神经网络进展】
  • yarn的安装和使用
  • Golang | Leetcode Golang题解之第10题正则表达式匹配
  • 【Leetcode】top 100 图论
  • 【沈阳航空航天大学】 <C++ 类与对象计分作业>
  • Vue3 自定义指令Custom Directives
  • 蓝桥杯 【日期统计】【01串的熵】
  • CSP201409T5拼图
  • mongoDB 优化(2)索引
  • 【2024系统架构设计】案例分析- 5 Web应用
  • 布隆过滤器详解及java实现
  • CloudCompare 点云工具
  • Linux 著名的sudo、su是什么?怎么用?
  • C语言分支语句
  • android 资源文件混淆
  • 注册接口和前置SQL及数据生成及封装
  • 鸿蒙实战开发-通过输入法框架实现自绘编辑框
  • 深度学习中的注意力模块的添加
  • Docker 部署开源远程桌面工具 RustDesk
  • intellij idea 使用git ,快速合并冲突
  • AcWing26. 二进制中1的个数。三种解法Java
  • 【ADB】常见命令汇总(持续更新)
  • 【递归与递推】数的计算|数的划分|耐摔指数
  • 企业案例:金蝶云星空集成钉钉,帆软BI
  • 简单设计模式讲解
  • 基于springboot的社区医疗服务系统
  • 影院座位选择简易实现(uniapp)