首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL 存储引擎 MyISAM 与 InnoDB 区别

MySQL 存储引擎 MyISAM 与 InnoDB 区别

作者头像
用户1289394
发布2021-01-06 00:03:09
发布2021-01-06 00:03:09
1K0
举报
文章被收录于专栏:Java学习网Java学习网

存储引擎 Storage engine:MySQL 中的数据、索引以及其他对象是如何存储的,是一套文件系统的实现。

常用的存储引擎有以下:

Innodb 引擎:Innodb 引擎提供了对数据库ACID 事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。一次写入操作是一次事务,innodb首先把事务数据写入到Buffer Pool和事务日志中,也就是在大脑中记忆下来,并写下草稿。然后就可以提交事务,响应客户端了。之后innodb在“有时间的时候”,异步地把这次写入的数据从Buffer Pool,或者事务日志中正式地写入到Datafile中,形成“正稿”。

其中,innodb为了保证事务日志这个“草稿”一定能无损地还原成正稿,还不能占用太多空间,事务日志需要有以下特点:

事务日志中一定保存了要写入的所有数据内容

事务日志只会把新事务追加在日志最后,而不会去修改之前的内容

一旦事务数据被写到datafile,事务日志中的“草稿”就可以删除了

通过上面3个特点我们可以看出,在形成“正稿”之前,“草稿”是不会被删除的;同时,“草稿”的空间是可以被循环利用的;最后,只要“草稿”在,我们一定能写出“正稿”。

MyIASM 引擎(原本Mysql 的默认引擎):不提供事务的支持,也不支持行级锁和外键。MyISAM使用的是表级锁,也就意味着在对表中的数据进行修改时,需要对整个表进行加锁。而在对表中的数据进行读取时,也需要对所有的表加共享锁。读取和写入这两种操作是互斥的,当然在一些情况下我们对表的数据进行读取时,也可以在表的末尾插入数据。由此可以看出,MyISAM对读写混合的并发性并不是太好,如果只是只读的话,就并发性而言,还是可以接受的,因为共享锁不会阻塞共享锁。

MEMORY 引擎:所有的数据都在内存中,数据的处理速度快,但是安全性不高

MyISAM 与 InnoDB 区别

MyISAM

Innodb

存储结构

每张表被存放在三个文件:

所有的表都保存在同一个数据文

frm-表格定义、

件中(也可能是多个文件,或者

MYD(MYData)-数据文件、

是独立的表空间文件),

MYI(MYIndex)-索引文件

InnoDB 表的大小只受限于操作

系统文件的大小,一般为 2GB

存储空间

MyISAM 可被压缩,存储空间

InnoDB 的表需要更多的内存和

较小

存储,它会在主内存中建立其专

用的缓冲池用于高速缓冲数据和

索引

可移植性、备份及

由于 MyISAM 的数据是以文件

免费的方案可以是拷贝数据文

恢复

的形式存储,所以在跨平台的

件、备份 binlog,或者用

数据转移中会很方便。在备份

mysqldump,在数据量达到几十

和恢复时可单独针对某个表进

G 的时候就相对痛苦了

行操作

文件格式

数据和索引是分别存储的,数

数据和索引是集中存储的,.ibd

据.MYD,索引.MYI

记录存储顺序

按记录插入顺序保存

按主键大小有序插入

外键

不支持

支持

事务

不支持

支持

锁支持(锁是避免

表级锁定

行级锁定、表级锁定,锁定力度

资源争用的一个机

小并发能力高

制,MySQL 锁对用

户几乎是透明的)

SELECT

MyISAM 更优

INSERT、

InnoDB 更优

UPDATE、

DELETE

select count(*)

myisam 更快,因为 myisam

内部维护了一个计数器,可以

直接调取。

索引的实现方式

B+树索引,myisam 是堆表

B+树索引,Innodb 是索引组织

哈希索引

不支持

支持

全文索引

支持

不支持

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档