MySQL 存储引擎详解

大家好 我是积极向上的湘锅锅💪💪💪

MySQL 支持哪些存储引擎?默认使用哪个?

MySQL常用引擎包括:MYISAM、Innodb、Memory、MERGE

  • MYISAM:全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差,占用空间
    相对较小,对事务完整性没有要求,以select、insert为主的应用基本上可以使用这引擎
  • Innodb:行级锁,提供了具有提交、回滚和崩溃回复能力的事务安全,支持自动增长列,支持
    外键约束,并发能力强,占用空间是MYISAM的2.5倍,处理效率相对会差一些
  • Memory:全表锁,存储在内容中,速度快,但会占用和数据量成正比的内存空间且数据在
    mysql重启时会丢失,默认使用HASH索引,检索效率非常高,但不适用于精确查找,主要用于那些内容变化不频繁的代码表
  • MERGE:是一组MYISAM表的组合

MySQL 支持多种存储引擎,你可以通过 show engines 命令来查看 MySQL 支持的所有存储引擎

在这里插入图片描述
从上图我们可以查看出, MySQL 当前默认的存储引擎是 InnoDB。并且,所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务

我这里使用的 MySQL 版本是 8.x,不同的 MySQL 版本之间可能会有差别。

MySQL 5.5.5 之前,MyISAM 是 MySQL 的默认存储引擎。5.5.5 版本之后,InnoDB 是 MySQL 的默认存储引擎。

你可以通过 select version() 命令查看你的 MySQL 版本。
在这里插入图片描述

MySQL 存储引擎架构了解吗?

MySQL 存储引擎采用的是插件式架构,支持多种存储引擎,我们甚至可以为不同的数据库表设置不同的存储引擎以适应不同场景的需要。存储引擎是基于的,而不是数据库

MyISAM 和 InnoDB 的区别是什么?

MySQL 5.5 之前,MyISAM 引擎是 MySQL 的默认存储引擎,可谓是风光一时

虽然,MyISAM 的性能还行,各种特性也还不错(比如全文索引、压缩、空间函数等)。但是,MyISAM 不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复
MySQL 5.5.5 之前,MyISAM 是 MySQL 的默认存储引擎。5.5.5 版本之后,InnoDB 是 MySQL 的默认存储引擎

简单对比一下两者:

1.是否支持行级锁

MyISAM 只有表级锁,而 InnoDB 支持行级锁和表级锁,默认为行级锁。

也就说,MyISAM 一锁就是锁住了整张表,这在高并发的环境下是很不可取的,所有InnoDB的优势不言而喻

2.是否支持事务

MyISAM 不提供事务支持。

InnoDB 提供事务支持,实现了 SQL 标准定义了四个隔离级别,具有提交(commit)和回滚(rollback)事务的能力。并且,InnoDB 默认使用的 REPEATABLE-READ(可重读)隔离级别是可以解决幻读问题发生的(基于 MVCC 和 Next-Key Lock)

3.是否支持外键

MyISAM 不支持,而 InnoDB 支持。

外键对于维护数据一致性非常有帮助,但是对性能有一定的损耗。因此,通常情况下,我们是不建议在实际生产项目中使用外键的,在业务代码中进行约束即可!

总结:一般我们也是不建议在数据库层面使用外键的,应用层面可以解决。不过,这样会对数据的一致性造成威胁。具体要不要使用外键还是要根据你的项目来决定

4.是否支持数据库异常崩溃后的安全恢复

MyISAM 不支持,而 InnoDB 支持。

使用 InnoDB 的数据库在异常崩溃后,数据库重新启动的时候会保证数据库恢复到崩溃前的状态。这个恢复的过程依赖于 redo log(日志),这也是保证事务持久性的关键

5.是否支持 MVCC

MyISAM 不支持,而 InnoDB 支持。

MVCC 可以看作是行级锁的一个升级,可以有效减少加锁操作,提高性能。而MyISAN连行级锁都不支持,MVCC就更不支持了

6.索引实现不一样

虽然 MyISAM 引擎和 InnoDB 引擎都是使用 B+Tree 作为索引结构,但是两者的实现方式不太一样。

InnoDB 引擎中,其数据文件本身就是索引文件。相比 MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按 B+Tree 组织的一个索引结构,树的叶节点 data 域保存了完整的数据记录

MyISAM 和 InnoDB 如何选择?

大多数时候我们使用的都是 InnoDB 存储引擎,在某些读密集的情况下,使用 MyISAM 也是合适的。不过,前提是你的项目不介意 MyISAM 不支持事务、崩溃恢复等缺点

所以对于咱们日常开发的业务系统来说,你几乎找不到什么理由再使用 MyISAM 作为自己的 MySQL 数据库的存储引擎

附一张MyISAM和InnoDB和Memory对比图
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL存储引擎的底层原理非常重要,因为它直接影响到MySQL数据库的性能和数据检索效率。目前常用的MySQL存储引擎有MyISAM和InnoDB。 MyISAM存储引擎使用的是表级锁定,这意味着当对一个表进行读或写操作时,会锁定整个表,导致在并发访问的情况下性能较低。而且MyISAM存储引擎不支持事务。 相比之下,InnoDB存储引擎使用的是行级锁定,它可以在并发读写操作时提供更好的性能。InnoDB还支持事务,这意味着可以对一系列的操作进行原子性、一致性、隔离性和持久性的保证。 在底层实现上,InnoDB存储引擎使用了一些关键技术。其中包括多版本并发控制(MVCC),通过为每个修改操作创建一个版本来实现并发控制,以避免读写操作之间的冲突。另外,InnoDB还使用了聚簇索引(clustered index)的概念,将数据按照主键的顺序进行存储,提高了数据的存取效率。 总的来说,MySQL存储引擎的底层原理包括锁定机制、事务支持、并发控制和索引结构等方面。具体的实现细节非常复杂,但理解这些原理对于优化MySQL的性能和设计数据库结构非常有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [深入理解 MySQL 索引底层原理](https://download.csdn.net/download/weixin_38750644/14832717)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [mysql底层数据存储原理](https://blog.csdn.net/ymb615ymb/article/details/128723576)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [MySQL数据库InnoDB存储引擎底层原理详解](https://blog.csdn.net/weixin_46831212/article/details/116885277)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

owensweat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值