主要区别:

1、MyISAM是非事务安全的,而InnoDB是事务安全的

2、MyISAM锁的粒度是表级的,而InnoDB支持行级锁

3、MyISAM支持全文类型索引,而InnoDB不支持全文索引

4、MyISAM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyISAM

5、MyISAM表保存成文件形式,跨平台使用更加方便

一、Mysql的两种存储引擎

1、MyISAM:

①不支持事务,但是整个操作是原子性的(事务具备四种特性:原子性、一致性、隔离性、持久性)

②不支持外键,支持表锁,每次所住的是整张表

MyISAM的表锁有读锁和写锁(两个锁都是表级别):

表共享读锁和表独占写锁。在对MyISAM表进行读操作时,不会阻塞其他用户对同一张表的读请求,但是会阻塞其他用户对表的写请求;对其进行写操作时会阻塞对同一表读操作和写操作

MyISAM存储引擎的读锁和写锁是互斥的,读写操作是串行的。那么,一个进程请求某个MyISAM表的读锁,同时另一个进程也请求同一表的写锁,MySQL如何处理呢?答案是写进程先获得锁。不仅如此,即使读请求先到锁等待队列,写请求后到,写锁也会插到读锁请求之前!这是因为MySQL认为写请求一般比读请求要重要。这也正是MyISAM表不太适合于有大量更新操作和查询操作应用的原因,因为,大量的更新操作会造成查询操作很难获得读锁,从而可能永远阻塞。这种情况有时可能会变得非常糟糕!

③一个MyISAM表有三个文件:索引文件,表结构文件,数据文件

④存储表的总行数,执行select count(*) from table时只要简单的读出保存好的行数即可

(myisam存储引擎的表,count(*)速度快的也仅仅是不带where条件的count。这个想想容易理解的,因为你带了where限制条件,原来所以中缓存的表总数能够直接返回用吗?不能用。这个查询引擎也是需要根据where条件去表中扫描数据,进行统计返回的。)

⑤采用非聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。

⑥支持全文索引和空间索引

⑦对于AUTO_INCREMENT类型的字段,在MyISAM表中,可以和其他字段一起建立联合索引。

MyISAM的主索引图:索引文件的每个数据域存储指向数据文件的指针(每个索引指向了数据地址)

MyISAM的辐索引:索引文件的每个数据域存储指向数据文件的指针(每个索引指向了数据地址),辐索引不用保证唯一性

2、Innodb:

①支持事务,支持事务的四种隔离级别;是一种具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

②支持行锁和外键约束,因此可以支持写并发

③不存储总行数;也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。

④对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引

⑤DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除

⑥一个Innodb表存储在一个文件内(共享表空间,表大小不受操作系统的限制),也可能为多个(设置为独立表空间,表大小受操作系统限制,大小为2G),受操作系统文件大小的限制

⑦主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问主键索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。

Innodb的主索引图:(索引位置上存储的直接是数据本身)

Innodb的辐索引图:

总结大图:

参考来源:传送门

dms系统与mysql_Mysql的两种存储引擎以及区别相关推荐

  1. mysql存储引擎的区别_Mysql的两种存储引擎以及区别

    一.Mysql的两种存储引擎 1.MyISAM: ①不支持事务,但是整个操作是原子性的(事务具备四种特性:原子性.一致性.隔离性.持久性) ②不支持外键,支持表锁,每次所住的是整张表 MyISAM的表 ...

  2. Mysql的两种存储引擎以及区别

    一.Mysql的两种存储引擎 1.MyISAM: ①不支持事务,但是整个操作是原子性的(事务具备四种特性:原子性.一致性.隔离性.持久性) ②不支持外键,支持表锁,每次所住的是整张表     MyIS ...

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

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

  4. mysql的两种存储方法_mysql的两种存储引擎

    背景 最近在使用spring-data-jpa操作mysql,在使用jpa的自动建表功能之后,处理多对多关系@ManyToMany的时候,spring-data-jpa会给中间表的两个字段都加上外键引 ...

  5. mysql 两种存储引擎 MyISAM 和InnoDB

    mysql 两种存储引擎 MyISAM 和InnoDB MyISAM 是MySQL中默认的存储引擎,一般来说不是有太多人关心这个东西.决定使用什么样的存储引擎是一个很tricky的事情,但是还是值我们 ...

  6. RAW和QCOW2 两种存储设备格式区别

    一.背景 当我们在KVM或者openstack或者docker环境中,常会遇到制作vm磁盘,以此作为vm的虚拟磁盘使用.主要是RAW和QCOW2这两种磁盘格式,其实他们都是一种文件格式,做为虚拟机的磁 ...

  7. mysql中两种备份方法的优缺点_Mysql两种存储引擎的优缺点

    MyISAM引擎是一种非事务性的引擎,提供高速存储和检索,以及全文搜索能力,适合数据仓库等查询频繁的应用.MyISAM中,一个table实际保存为三个文件,.frm存储表定义,.MYD存储数据,.MY ...

  8. MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇

    一 MyISAM 1.1 MyISAM简介 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的顺 ...

  9. MySQL两种存储引擎: MyISAM和InnoDB

    数据库中的存储引擎其实是对使用了该引擎的表进行某种设置,数据库中的表设定了什么存储引擎,那么该表在数据存储方式.数据更新方式.数据查询性能以及是否支持索引等方面就会有不同的"效果" ...

  10. MySQL两种存储引擎: MyISAM和InnoDB 简单总结

    转自:https://www.cnblogs.com/kevingrace/p/5685355.html MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed S ...

最新文章

  1. 帮小猴子准备的高数知识点
  2. 划分vlan,制作trunk口。使同一vlan能互相通讯
  3. 关于Java重载方法匹配优先级
  4. 修改hosts文件使apache绑定域名指向本机
  5. hdu-1074 Doing Homework
  6. 什么是SSID/ESSID/BSSID
  7. Windows学习总结(13)——各品牌电脑进入BIOS按键汇总
  8. 【PHP学习】—利用ajax原理实现密码修改功能(九)
  9. 主角有智能芯片的种田小说_5本搞笑玩梗的良品小说,文风轻松幽默,一本正经地逗你笑...
  10. 【Guava】基于guava的重试组件Guava-Retryer
  11. linux amd64目录,创建基于amd64的qqforlinux的deb包
  12. Python tkinter教程-04:输入框
  13. 12岁的B站,放慢脚步做社区
  14. 照片太大怎么压缩200k?图片怎么缩小到200k以下?
  15. Python_4组数据看线性回归的假设检验问题
  16. 京东:按关键字搜索商品 API
  17. Windows下隐藏文件夹
  18. 吕本富:中国Web2.0缺乏创新 与美国差距拉大
  19. 黑马程序员HTML+CSS学成在线项目
  20. 解决“error ‘else’ without a previous ‘if’”错误

热门文章

  1. Delphi第三方控件安装卸载指南
  2. BFS POJ 3126 Prime Path
  3. JAVA和JVM运行原理揭秘
  4. rabbitmq注意事项
  5. Spring中的@Autowired,@Qualifier和@Primary注解
  6. Hadoop系列教程:服务器基础环境
  7. LeetCode之Rectangle Overlap(Kotlin)
  8. 利用Python制作微信跳一跳外挂,又来带你装一波X!
  9. Day21 linux安装RPM包
  10. [WebApi] 捣鼓一个资源管理器--数据库辅助服务器文件访问