1、InnoDB支持事务,MyISAM不支持,也就是说MyISAM不支持事务回滚操作,这个功能可能是致命的

2、InnoDB支持行锁,MyISAM只支持表锁,不过InnoDB的行锁是建立在索引之上的,也就是说如果索引未命中,那么此次操作还是会降级到表锁。如uid为索引

update t_user set age=10 where uid=1;             命中索引,行锁。

update t_user set age=10 where uid != 1;           未命中索引,表锁。

3、InnoDB表是基于聚簇索引建立的,采用B+树,MyISAM是基于非聚簇索引,索引数据结构也是B+树

聚簇索引:它并不是一种单独的索引类型,而是一种数据存储方式。聚簇索引是依托主键而建立的,这种存储方式将索引值与数据行全部存储到同一个结构中。

如果没有主键,InnoDB会选择一个唯一的非空索引代替,如果没有符合条件的索引,InnoDB会隐式的创建一个主键来作为聚簇索引。InnoDB中,其非聚簇索引,又叫辅助索引或者二级索引,他们是将数据行地址(这里更正一下,二级索引中存放的并不是指向行的指针,而是行的主键值!)存到B+树的叶子结点中,也就是说,想通过二级索引查找行数据,存储引擎需要先找到二级索引的叶子结点对应的主键值,然后根据这个值去聚簇索引中查找到相应的数据行。这里做了重复的工作,因此至少做两次B+tree查找(至少,是因为可能有的数据更新后无法存储在原来的位置,这会导致表中出现行的碎片化或者在原位置留下一个指向新位置的指针,因此一次非聚簇索引未必能找到目的主键值)。对于InnoDB来说,自适应哈希索引能够减少这样的重复工作。

因此,聚簇索引对于IO密集型的系统来说至关重要,可以大大提高其性能。但如果系统将数据全部存放在内存中,聚簇索引便没什么优势了。但是,聚簇索引也有一定的弊端,比如更新局促索引列的代价太高,整行数据都得跟着索引移到新的位置,还有页分裂问题等。

对于MyISAM存储引擎,包含以下三种格式的文件:

.frm      是描述表结构的文件

.MYD   是表的数据文件

.MYI     是表数据文件中任何索引的数据树

对于InnoDB,索引和数据都在同一个文件内,.IDB

4、InnoDB是不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快

5、InnoDB版本5.7之后才开始支持全文索引,而MyISAM一直支持全文索引

6、MyISAM是支持压缩的,压缩后的表传输、查询速率都大大提高,不过压缩状态下的表是不可以修改的,只有解压后才可修改

7、InnoDB支持外键而MyISAM不支持,也就是说,如果将一个表由InnoDB转成MyISAM然后再转回来,外键会消失

8、InnoDB表必须有主键(用户没有指定的话会自己找或生成一个隐式主键),而Myisam可以没有

那么二者如何选择呢?

如果需要事务和事务回滚,InnoDB!

如果读远多于写,MyISAM!

如果你还是没主意,那就InnoDB吧,毕竟它是目前主推(默认)的内存引擎

最后,这里提一下InnoDB引擎的四大特性(想要深入研究的同学可以看这位博主的链接):插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead)

mysql5.7 innodb myisam 区别_InnoDB与MyISAM的区别(高性能MySQL笔记)相关推荐

  1. mysql innodb myisam 区别_InnoDB与MyISAM的六大区别_MySQL

    bitsCN.com 本文主要整理了Mysql 两大常用的存储引擎MyISAM,InnoDB的六大常见区别,来源于Mysql手册以及互联网的资料 InnoDB与Myisam的六大区别 MyISAMIn ...

  2. myisam为什么比innodb查询快_InnoDB 和 MyISAM的数据分布是什么样的?

    建表及插入数据 聚簇索引和非聚簇索引的数据分布有区别,以及对应的主键索引和二级索引的数据分布也有区别.下面我们看 InnoDB 和 MyISAM 是如何存储下面这个表: DROP TABLE IF E ...

  3. MySQL笔记10:engine=innodb和engine=myisam的区别和用法!

    MYSQL中engine=innodb和engine=myisam的区别和用法! 区别 1.myisam类型不支持事务处理等高级处理,而innodb类型支持. 2.myisam类型的表强调的是性能,其 ...

  4. MyISAM和InnoDB执行引擎的区别,为什么MyISAM查询效率高,B树和B+树的区别

    1. MyISAM和InnoDB的区别 ①MyISAM查询效率高,InnoDB查询效率低: ②MyISAM不支持事务和外键,而InnoDB支持: ③MyISAM是非聚簇索引(索引的叶子节点存储的是数据 ...

  5. mysql中myisam和_MySQL中myisam和innodb的区别

    区别: 1.innodb支持事务,myisam不支持事务.innodb默认AUTOCOMMIT是开启的,每条SQL会默认封装成一个事务 2.innodb支持行级锁定,myisam支持表级锁定 3.in ...

  6. java innodb存储引擎_InnoDB存储引擎简介

    前言: 存储引擎是数据库的核心,对于 MySQL 来说,存储引擎是以插件的形式运行的.虽然 MySQL 支持种类繁多的存储引擎,但最常用的当属 InnoDB 了,本篇文章将主要介绍 InnoDB 存储 ...

  7. MySQL中的锁机制、MyISAM表锁、MyISAM表级锁争用情况、MyISAM并发插入Concurrent Inserts、MyISAM的锁调度

    前言: 关于读锁.写锁.乐观锁.悲观锁.行锁.表锁的理解可以看看以前我写的: 读锁.写锁.乐观锁.悲观锁.行锁.表锁 内部锁:在MySQL服务器内部执行的锁,以管理多个会话对表内容的争用.这种类型的锁 ...

  8. r语言和python-Python和R语言的区别_Python与R的区别和联系

    Python和R语言的区别_Python与R的区别和联系 可能问这个问题会很无脑,但是我还没有深入接触过Python,只是用过R语言.谁能帮我解答一下,这两者的主要区别呢?是否存在代替关系呢? 精彩解 ...

  9. java中的异常种类和区别以及处理机制和区别

    java中的异常种类和区别以及处理机制和区别 按照异常需要处理的时机分为编译时异常(也叫强制性异常)也叫 CheckedException 和运行时异常(也叫非强制性异常)也叫 RuntimeExce ...

最新文章

  1. wordpress acf字段 不同样式_WordPress强大搜索功能如何实现?安装Ivory Search插件
  2. cas协议,以及tomcat搭建cas服务器
  3. 最优化学习笔记(四)共轭梯度法
  4. crtmpserver 配置说明_crtmpserver框架代码详解
  5. 【Fastboot】给android刷整个系统和系统某个单独模块的方法
  6. 华为手机设置页面黑色_羡慕黑色背景照片?华为手机简单一招即可轻松拍摄
  7. intel 傲腾内存与SSD HDD的对比
  8. python RTL自动生成_RTL建模
  9. 精选的 Go 框架,库和软件的精选清单
  10. 修改egret引擎源码
  11. 网游实时对战同步技术三篇
  12. 离散数学-2 命题逻辑等值演算
  13. python Django 快捷键
  14. ios中safari浏览器100vh带有滚动条?
  15. 【高等数学】-积分再现公式
  16. 公开资料整理网是什么_语文老师最常用的5个备课网站推荐,第1个资料质量很高...
  17. 让M3D-RPN的3D目标检测网络初步跑起来!
  18. Spring Cloud Nacos整合 Seata 实现分布式事务
  19. 全新的红巨人粒子特效套装插件:TrapCode Suite Mac版
  20. 医院如何选择HIS及电子病历系统

热门文章

  1. Spring Boot 内嵌容器 Tomcat / Undertow / Jetty 优雅停机实现
  2. dataframe scala 修改值_【Spark学习笔记】 Scala DataFrame操作大全
  3. 如何通过JMX远程监控Solr?
  4. saltstack之基础入门系列文章简介
  5. mysql limit函数
  6. Windows Phone开发(8):关于导航的小技巧
  7. C++ - 类模板(class template) 详解 及 代码
  8. Vue中$refs的理解
  9. linux中vim编辑器_为什么Vim爱好者喜欢Herbstluftwm Linux窗口管理器
  10. 性能测试测试环境与生产环境_不在生产中测试? 在生产中进行测试!