数据库篇(3)--MySQL存储引擎InnoDB和MyISAM区别及使用场景

InnoDB和MyISAM是MySQL的两种主要存储引擎,各有特点。InnoDB支持事务处理、行级锁和外键,适合写多读少、高并发的场景;而MyISAM强调快速读取,不支持事务,采用表级锁,适用于读多写少的情况。在数据恢复和跨平台拷贝方面,InnoDB更具优势。选择存储引擎应根据具体业务需求来定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、先了解一下InnoDB与MyISAM分别是什么,又因何诞生


  • InnoDB是集聚引擎。它设计之初就是为了处理大量数据时提供高性能的服务,因此在运行时会在内存中建立缓冲池,用于缓冲数据和索引。
  • MyISAM是非集聚引擎。它设计之初就是为了快速读取。

二、InnoDB与MyISAM的区别


我们通过上述知道,InnoDB设计之初就是处理大量数据时提供高性能的服务。那么大量数据处理过程中,我们肯定会一些问题:

  1. 事务问题:在大规模数据中,就意味着有可能大规模的修改,遇到事务问题也是很常见,因此肯定会添加事务相关的操作(事务ACID特性、SQL隔离级别等)
  2. 锁表问题:有时候我们修改表中的数据,为了确保原子性操作,往往锁住一整张表。如果改表里的一行数据就要锁住该表,这对性能来说,是不太友好的,因此需要细化锁,因此,也需要添加行锁的支持。
  3. 关联表问题:当大数据量的时候,会将不同的信息放在不同的表。有时为了获取完整的信息,会进行关联表的操作,使用外键能大大增加其性能。
  4. 拷贝问题:这个不用多说,肯定要支持跨平台拷贝。
  5. 数据恢复问题:这么多数据,如果一旦丢失找不回来,这可是最忌讳的,因此,也必须要有能恢复数据的方法。
  6. 统计表中有多少行数问题:在这种结构下,他就是会频繁的写数据以及改数据,保存表中有多少行数据显示不符合设计理念。(因为它没有保存表的行数,当使用COUNT统计时会扫描全表

那我们再来看看MyISAM,其设计之初就只考虑快速读取。因此我们想想,为了快速读取,我们会抛弃哪些功能或者增强哪些功能?

  1. 事务功能:如果仅仅是为了快速读取,那么就不怎么需要事务了,事务大概率是要加锁阻塞的
  2. 行锁及外键功能:前面说了仅仅为了快速读取,不怎么考虑插入、更新问题、甚至连关联表问题都没有考虑,因此锁是没有细化的(还是表锁),外键也是没有的。(比如:INSERT和UPDATE操作需要锁定整个表
  3. 数据恢复功能:就是为了频繁读取设计,还考虑个毛数据恢复啊,又不是频繁写。
  4. 拷贝功能:MyISAM设计的结构很难进行跨平台拷贝。
  5. 统计表中有多少行数功能:读取也是经常要读取表中有多少行,因此也是会具备的。(因为它保存了表的行数,当使用COUNT统计时不会扫描全表

因此,我们知道InnoDB与MyISAM的区别

特性

InnoDB

MyISAM

索引类型

聚簇索引(主键索引即数据文件)

非聚簇索引(索引与数据分离)

主键索引叶子节点

存储完整数据行

存储数据行的物理地址

辅助索引叶子节点

存储主键值(需回表查询)

存储数据行的物理地址

事务支持

支持 ACID 事务

不支持事务

锁粒度

行级锁(默认)

表级锁

外键支持

支持外键

不支持外键

崩溃恢复

通过 redo log 和 undo log 保障

无日志,依赖文件系统恢复

全文索引

MySQL 5.6+ 支持全文索引

原生支持全文索引(但性能较低)

适用场景

高并发写入、事务性操作

只读或读多写少的场景

三、InnoDB与MyISAM的使用场景


InnoDB

MyISAM

使用场景

1.系统读少,写多的时候,尤其是并发写⼊⾼的时候

2.需要事务的操作

3.更新数据需要使用行级锁

4.大数据量读写

1.系统读多,写少,对原⼦子性要求低

2.不需要事务的操作

3.插入、更新少,读取频繁

4.频繁的统计计算

备注:

  1. mysql默认引擎:mysql-5.1版本之前默认引擎是MyISAM,之后是innoDB。

  2. DELETE 表时,InnoDB引擎是一行一行的删除,MyISAM是先drop表然后重建表。

  3. 因为MyISAM相对简单所以在效率上要优于InnoDB

  4. MyISAM恢复速度快,可直接⽤用备份覆盖恢复

 更多内容:

数据库篇(1)--数据库事务的四大特性(ACID)

数据库篇(2)--数据库隔离级别及脏读、不可重复读、幻读

数据库篇(3)--MySQL存储引擎InnoDB和MyISAM区别及使用场景

数据库篇(4)--索引

数据库篇(5)-- sql 优化

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sun cat

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

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

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

打赏作者

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

抵扣说明:

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

余额充值