MyISAM和InnoDB的区别

定义

InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎。它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚。InnoDB的性能与自动崩溃恢复的特性,使得它在非事务存储需求中也很流行。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。

MyISAM:在MySQL 5.1 及之前的版本,MyISAM是默认引擎。MyISAM提供的大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM并不支持事务以及行级锁,而且一个毫无疑问的缺陷是崩溃后无法安全恢复。

事务

InnoDB:支持

MyISAM:不支持

InnoDB:支持行锁、表锁。行锁是实现在索引上的,如果没有索引,就没法使用行锁,将退化为表锁。

MyISAM:支持表锁。

主键

InnoDB:必须有,没有指定会默认生成一个隐藏列作为主键

MyISAM:可以没有

索引

InnoDB:聚集索引,使用 B+ 树作为索引结构,数据文件和索引绑在一起,必须要有主键。主键索引一次查询;辅助索引两次查询,先查询主键,再查询数据;

MyISAM:非聚集索引,使用 B+ 树作为索引结构,索引和数据文件是分离的。主键索引和辅助索引是独立的。

外键

InnoDB:支持

MyISAM:不支持

AUTO_INCREMENT

InnoDB:必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。

MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。

数据库文件

InnoDB:frm是表定义文件,ibd是数据文件。支持两种存储方式:

  • 共享表空间存储:所有表的数据文件和索引都保存在一个表空间里,一个表空间可以有多个文件,通过 innodb_data_file_pathinnodb_data_home_dir 参数设置共享表空间的位置和名字,一般共享表空间的名字叫 ibdata1-n
  • 多表空间存储:每个表都有一个表空间文件用于存储每个表的数据和索引,文件名以表名开关,以.ibd为扩展名

MyISAM:frm是表定义文件,myd是数据文件,myi是索引文件。支持三种存储格式:静态表(默认,注意数据末尾不能有空格,会被去掉。)、动态表、压缩表。

表的行数

InnoDB:没有保存。select count(*) from table;会扫描全表。

MyISAM:保存。select count(*) from table;会直接取出该值。

注:但加了 where 条件后,两者处理方式一样,都是扫描全表。

全文索引

InnoDB:5.7及以后版本支持。

MyISAM:支持。

总结

InnoDB

  • 优点:支持事务,支持外键,并发量较大,适合大量 update。
  • 缺点:查询数据相对较快,不适合大量的 select。

MyISAM

  • 优点:查询数据相对较快,适合大量的 select,可以全文索引。
  • 缺点:不支持事务,不支持外键,并发量较小,不适合大量 update。

如何选择?

  • 你的数据库有外键吗?如有,选择 InnoDB
  • 你需要事务支持吗?如需要,选择 InnoDB
  • 你需要全文索引吗?在5.7及以后版本,都可选,优先考虑 InnoDB + Sphinx
  • 你经常使用什么样的查询模式?如果表中绝大多数都只是读查询,可以考虑 MyISAM,如果既有读写也挺频繁,请使用 InnoDB
  • 你的数据有多大?数据量大,选择 InnoDB,因为其支持事务处理和故障恢复。MyISAM 可能需要几小时或几天来恢复,InnoDB 只需要几分钟。
  • 你需要在线热备份吗?如需要,选择 InnoDB

参考资料

MySQL存储引擎:MyISAM和InnoDB的区别的更多相关文章

  1. MySQL存储引擎MyISAM与InnoDB的区别比较

    使用MySQL当然会接触到MySQL的存储引擎,在新建数据库和新建数据表的时候都会看到. MySQL默认的存储引擎是MyISAM,其他常用的就是InnoDB了. 至于到底用哪种存储引擎比较好?这个问题 ...

  2. MySql存储引擎MyISAM和InnoDB的区别

    1.MySQL默认采用的是MyISAM. 2.MyISAM不支持事务,而InnoDB支持.InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速 ...

  3. MySQL存储引擎 - Myisam和Innodb

    Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始 ...

  4. MySQL存储引擎MyISAM与InnoDB

    一. MySQL存储引擎MyISAM与InnoDB如何选择 MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...

  5. MySQL存储引擎MyISAM和InnoDB,索引结构优缺点

    MySQL存储引擎MyISAM和InnoDB底层索引结构 深入理解MySQL索引底层数据结构与算法 (各种索引结构优缺点) Myisam和Innodb索引实现的不同(存储结构) 存储引擎作用于什么对象 ...

  6. MySQL存储引擎MyISAM和InnoDB有哪些区别?

    一.MyISAM和InnoDB的区别有哪些? 1.InnoDB支持事务,MyISAM不支持.对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在be ...

  7. Mysql存储引擎myisam与inndb的区别?

    最近在研究Mysql存储引擎这块,说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法,在此做一个大概总结: 其实在工作中用的最多也就是MYISAM和INNODB,IN ...

  8. Mysql 的存储引擎,myisam和innodb的区别

    MyISAM 是非事务的存储引擎,innodb是支持事务的存储引擎. innodb的引擎比较适合于插入和更新操作比较多的应用,而MyISAM 则适合用于频繁查询的应用 . MyISAM --表锁,in ...

  9. MySQL存储引擎MyISAM与InnoDB区别总结整理

    在MySQL的 可重复读隔离级别 中,是解决了幻读的读问题的. 1. MySQL默认存储引擎的变迁 在MySQL 5.5之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默 ...

  10. 170309、MySQL存储引擎MyISAM与InnoDB区别总结整理

    1.MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB. 2.MyISAM与InnoDB存 ...

随机推荐

  1. 对pipe downstream的思考&分析

       回到ngx_http_upstream_send_response,如果是buffering,就会进入后面的处理过程,准备一个ngx_event_pipe_t结构的数据,这个结构可以通过upst ...

  2. umask及文件默认和原始权限说明

    umask作用:设置了用户创建文件的默认权限.是权限的补码,一般在/etc/profile.$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值. 查看um ...

  3. WPF窗体中嵌入/使用WinForm类/控件(基于.NET Core)

    如题,WPF中嵌入WinForm的做法,网络上已经很多示例,都是基于.NET XXX版的. 今天King様在尝试WPF(基于.NET Core 3.1)中加入Windows.Forms.ColorDi ...

  4. 工作流(workflow)

    1,JBPM 工作流(开源历史悠久) 2,activity 工作流(开源历史悠久) 3,workable 工作流(功能比较强大,但是开源维护缓慢,比较注重商业化) 以上三个是主流的工作流

  5. CentOS 6.10 安装mysql

    1.检查是否安装有mysql rpm -qa | grep mysql 使用yum remove 包  的方式删除干净 2.下载yum Repository wget -c  http://dev.m ...

  6. springboot实战开发全套教程,让开发像搭积木一样简单!Github星标已上10W+!

    前言 先说一下,这份教程在github上面星标已上10W,下面我会一一给大家举例出来全部内容,原链接后面我会发出来!首先我讲一下接下来我们会讲到的知识和技术,对比讲解了多种同类技术的使用手日区别,大家 ...

  7. 深度分析:面试阿里,字节跳动,美团90%被问到的List集合,看完还不懂算我输

    1 List集合 1.1 List概述 在Collection中,List集合是有序的,可对其中每个元素的插入位置进行精确地控制,可以通过索引来访问元素,遍历元素. 在List集合中,我们常用到Arr ...

  8. HarmonyOS Java UI之StackLayout布局示例

    StackLayout简介 StackLayout意为堆叠布局,用于在屏幕上保留一个区域来显示组件,实现特殊的功能.通常,堆叠布局中只应该放置一个子组件,如果存在多个子组件,则显示最新的组件.这个布局 ...

  9. JVM垃圾回收器、内存分配与回收策略

    新生代垃圾收集器 1. Serial收集器 serial收集器即串行收集器,是一个单线程收集器. 串行收集器在进行垃圾回收时只使用一个CPU或一条收集线程去完成垃圾回收工作,并且会暂停其他的工作线程( ...

  10. 2020.6.16 night 解题报告

    2020.6.16 night 解题报告 link 标签(空格分隔): 题解 概率与期望 T1 : Crossing Rivers UVA - 12230 SB题. 很唬人的一个连续期望. 很明显,在 ...