文章目录

  • 前言
  • 区别
    • 存储结构
    • 存储空间
    • 存储特性
    • 事务支持
    • 主键自增
    • 表锁差异
    • 全文索引
    • 表主键
    • CRUD
    • 外键
  • 选择
  • 后记

前言

喝水不忘打井人,既然在用 MySQL,就应该了解其工作原理,今儿就来探讨一番它的引擎,这同样也是面试热点;

接下来通过对比来呈现;

区别

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

MyISAM:在 MySQL 5.1 及之前的版本,MyISAM 是默认引擎。MyISAM 提供的大量的特性,包括全文索引、压缩、空间函数(GIS)等,但 MyISAM 并不支持事务以及行级锁,而且一个毫无疑问的缺陷是崩溃后无法安全恢复。正是由于 MyISAM 引擎的缘故,即使 MySQL 支持事务已经很长时间了,在很多人的概念中 MySQL 还是非事务型数据库。尽管这样,它并不是一无是处的。对于只读的数据,或者表比较小,可以忍受修复操作,则依然可以使用 MyISAM(但请不要默认使用 MyISAM,而是应该默认使用 InnoDB)

存储结构

MyISAM:每个 MyISAM 在磁盘上存储成三个文件。分别为:表定义文件、数据文件、索引文件。表定义文件的扩展名为 .frm,数据文件的扩展名为 .MYD (MYData),索引文件的扩展名是 .MYI (MYIndex)。

InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB 表的大小只受限于操作系统文件的大小,一般为2GB。

存储空间

MyISAM: MyISAM 支持支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。当表在创建之后并导入数据之后,不会再进行修改操作,可以使用压缩表,极大的减少磁盘的空间占用。

InnoDB: 需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。

存储特性

MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便,在备份和恢复时可单独针对某个表进行操作。

InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。

事务支持

MyISAM:强调的是性能,每次查询具有原子性,其执行数度比 InnoDB 类型更快,但是不提供事务支持。

InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

主键自增

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

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

表锁差异

MyISAM: 只支持表级锁,用户在操作 MyISAM 表时,select,update,delete,insert 语句都会给表自动加锁,如果加锁以后的表满足 insert 并发的情况下,可以在表的尾部插入新的数据。

InnoDB: 支持事务和行级锁,是 InnoDB 的最大特色。行锁大幅度提高了多用户并发操作的新能。但是 InnoDB 的行锁,只是在 WHERE 的主键是有效的,非主键的 WHERE 都会锁全表的。

全文索引

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

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

表主键

MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。

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

CRUD

MyISAM:如果执行大量的 SELECT,MyISAM 是更好的选择。

InnoDB:如果你的数据执行大量的 INSERT 或 UPDATE,出于性能方面的考虑,应该使用 InnoDB 表。

外键

MyISAM:不支持;

InnoDB:支持;

选择

  1. 是否要支持事务,如果要请选择 InnoDB,如果不需要可以考虑 MyISAM;

  2. 如果表中绝大多数都只是读查询,可以考虑 MyISAM,如果既有读写也挺频繁,请使用 InnoDB;

  3. 系统奔溃后,MyISAM 恢复起来更困难,能否接受,不能接受就选 InnoDB;

  4. MySQL5.5 版本开始Innodb已经成为 Mysql 的默认引擎(之前是 MyISAM),说明其优势是有目共睹的。如果你不知道用什么存储引擎,那就用 InnoDB,至少不会差;

后记

现在是缺啥补啥,接下来深入研究算法…

MyISAM 与 InnoDB相关推荐

  1. MySQL数据库中的MyISAM和InnoDB存储引擎对比

    一.InnoDB和MylSAM存储引擎对比 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访 ...

  2. MySQL 两种存储引擎:MyISAM与InnoDB对比及理解

    MySQL 两种存储引擎:MyISAM与InnoDB对比及理解 目前MySQL默认的存储引擎是InnoDB 现在大多数时候我们使用的都是InnoDB存储引擎,但是在某些情况下使用MyISAM更好,比如 ...

  3. MySQL两种表存储结构MyISAM和InnoDB的性能比较测试

    MySQL支持的两种主要表存储格式MyISAM,InnoDB,上个月做个项目时,先使用了InnoDB,结果速度特别慢,1秒钟只能插入10几条.后来换成MyISAM格式,一秒钟插入上万条.当时决定这两个 ...

  4. mysql分页tmp_count,MySQL MyISAM和InnoDB引擎的写入速度优化比较,分页速度优化

    以下的文章主要介绍的是MySQL MyISAM的引擎和InnoDB引擎的实际性能的比较,我们首先是通过MySQL数据库的表结构来出MySQL MyISAM的引擎和InnoDB引擎的实际性能的实际操作. ...

  5. MySQL存储引擎中的MyISAM和InnoDB区别详解

    MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点 ...

  6. Mysql存储引擎MyIsAM和InnoDB区别

    Mysql 数据库中,最常用的两种引擎是innordb 和myisam.InnoDB 是Mysql 的默认存储引擎. 两者的区别: 1.事务处理上方面 MyISAM:强调的是性能,查询的速度比Inno ...

  7. MySQL中MyISAM 与innoDB的区别(转)

    InnoDB 和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而 InnoDB类型支持.MyISAM类型的表强调 ...

  8. Mysql存储引擎详解(MyISAM与InnoDB的区别)

    Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎     MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...

  9. MyISAM和InnoDB的索引在实现上的不同

    1 MyISAM只把索引载入内存,数据缓存依赖于操作系统,InnoDB把索引和数据都载入内存缓冲 2 MyISAM数据库中的数据是按照插入的顺序保存,在每个索引节点中保存对应的数据行的地址,理论上说主 ...

  10. 引擎讲解2--主要是MyISAM和InnoDB的区别

    文章转自:http://menglimengwai.iteye.com/blog/464667 MySQL常用的存储引擎为MyISAM.InnoDB.MEMORY.MERGE,其中InnoDB提供事务 ...

最新文章

  1. 危机四伏的千亿级金融放贷市场,我们能做什么?
  2. 使用Apache Commons Configuration读取配置信息
  3. Linux程序映像的布局
  4. 培训学校计算机助教是干嘛的,【助教】的意思是什么?【助教】是什么意思?...
  5. Sublime Text 3 配置和使用方法
  6. leetCode 110. Balanced Binary Tree 平衡二叉树
  7. linux管理员权限命令_每个系统管理员应该知道的20个Linux命令
  8. Python的那些隐藏特性
  9. ubuntu16.0.4安装mysql5.7以及设置远程访问
  10. 矩阵分析与应用(20)
  11. flash实验中需添加的flash.c文件
  12. day002血字的研究
  13. 激光雷达进入「规模化」上车周期?最大变数是什么?
  14. java类的构造方法编程训练—买可乐
  15. 3类IP的私网地址网段
  16. MICCAI2019论文分享 PART①
  17. c语言国际编码标准统一编码,88、国际C语言混乱代码大赛-2020.03.11
  18. matlab 电力电子元件对应名称,MATLAB在电力电子技术的应用
  19. Docker Hub账号申请
  20. 查看电脑ip,关闭电脑,远程重启关闭等电脑命令大全

热门文章

  1. jquery去掉onclick事件
  2. 无手机号注册Outlook邮箱方法
  3. outlook收邮件延迟_如何计划或延迟在Outlook中发送电子邮件
  4. 合作式智能运输系统 应用层交互技术要求 第 1 部分:意图共享与协作
  5. CentOS6 使用 RPM 安装 apache 服务器(一)
  6. onlyoffice安装之二:centos7安装
  7. 快速构建Table和Form页面
  8. Bootstrap3的栅格化布局样式
  9. 24岁博士毕业、47岁当选院士的他,正式担任上海交通大学校长!
  10. 算法中的一些数学问题分享,ICG游戏