首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL中InnoDB和MyISAM引擎的区别

MySQL中InnoDB和MyISAM引擎的区别

作者头像
晓果冻
发布2022-09-08 12:42:45
发布2022-09-08 12:42:45
6400
举报

MySQLInnoDBMyISAM引擎的区别

MyISAM的结构

InnoDB 支持事务,MyISAM 不支持事务。
InnoDB 支持外键,而 MyISAM 不支持。
表的行数
代码语言:javascript
复制
InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数。
表锁差异
代码语言:javascript
复制
InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。用户在操作MyISAM表时,select,update,delete,insert语句都会给表自动加锁。
可移植性、备份及恢复的差别
代码语言:javascript
复制
MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。

InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。
存储结构
代码语言:javascript
复制
MyISAM:每个MyISAM在磁盘上存储成三个文件。分别为:表定义文件、数据文件、索引文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。

InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。
CRUD操作
代码语言:javascript
复制
MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。

InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。
索引差异
代码语言:javascript
复制
InnoDB 是聚集索引,MyISAM 是非聚集索引。

MyISAM:支持 FULLTEXT类型的全文索引

InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。

InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。

MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL中InnoDB和MyISAM引擎的区别
    • InnoDB 支持事务,MyISAM 不支持事务。
    • InnoDB 支持外键,而 MyISAM 不支持。
    • 表的行数
    • 表锁差异
    • 可移植性、备份及恢复的差别
    • 存储结构
    • CRUD操作
    • 索引差异
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档