InnoDB与MyISAM的区别

今天被人问到InnoDB与MyISAM的区别,突然发现虽然平时做项目时经常时经常用到这两种存储引擎,但却只知道两者在事务支持方面的区别,其它的竟一概不知。

回到家立即查阅了相关资料,终于搞清楚这两者之间的真正差异,这里记录一下以备忘。

两者之间的差异

  • MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持
  • MyISAM类型的表强调的是性能,其执行数度比 InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外键等高级数据库功能
  • InnoDB不支持FULLTEXT类型的索引,而MyISAM支持
  • InnoDB 中不保存表的具体行数,也就是说,执行select count() from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含 where条件时,两种表的操作是一样的
  • 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引
  • DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,MyISAM里会重新建立表
  • InnoDB支持行锁,MyISAM不支持。但InnoDB的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%a%”
  • MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少,能加载更多索引。而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小

如何选择

  • 数据量小,不太在乎读写性能,但需要事务、外键支持,可选用InnoDB
  • 数据量大,读多写少,关注读写性能,可选用MyISAM,事务方面可用CAS的方案实现数据操作的原子性
  • MyISAM表由3个文件构成,可直接将这3个文件拷贝到其它数据库,即完成数据迁移,十分便捷
  • 需要使用全文索引,则选用MyISAM
  • 数据量大,关心数据存储的体积大小,可选用MyISAM

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术博文

从MyISAM转到InnoDB需要注意什么

转自 MySql中文网 http://mp.weixin.qq.com/s?__biz=MjM5NzAzMTY4NQ==&mid=200910426&idx=1...

374140
来自专栏PHP在线

MySQL 数据库锁定机制

1. MySQL 锁定机制简介 各存储引擎使用三种类型锁定机制 行级锁定(row-level) 表级锁定(table-level) 页级锁定(page...

440160
来自专栏智能合约

数据插入失败引发的主键auto_increment问题

36430
来自专栏程序猿

MySQL优化方案(一)优化SQL脚本与索引

MySQL的优化方案有哪一些? 本文记录MySQL优化方案 ,梗概如下: 优化SQL 优化索引 (一)优化SQL 1、通过MySQL自有的优化语句 优化SQL语...

45470
来自专栏北京马哥教育

数据库基础知识:数据库中的约束和三大范式

? 一.数据库中的范式: 范式, 英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后...

32870
来自专栏匠心独运的博客

大型分布式业务平台数据库优化方法(上)

文章摘要:一个小小的MySQL数据库B-Tree索引可能会带来意想不到的性能优化提升……

17240
来自专栏轮子工厂

数据库性能优化,原来还可以有这种操作

7310
来自专栏数据和云

MySQL SQL优化之覆盖索引

内容概要 利用主索引提升SQL的查询效率是我们经常使用的一个技巧,但是有些时候MySQL给出的执行计划却完全出乎我们的意料,我们预想MySQL会通过索引扫描完成...

49560
来自专栏JAVA烂猪皮

用 Node + MySQL 如何处理 100G 数据

通过这个 Node.js 和 MySQL 示例项目,我们将看看如何有效地处理 数十亿行 占用 数百GB 存储空间的数据。

21450
来自专栏高性能服务器开发

数据库进阶3 Mysql 性能优化20个原则(1)

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事...

11710

扫码关注云+社区

领取腾讯云代金券