一 MyISAM

1.1 MyISAM简介

MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。不过,5.5版本之后,MySQL引入了InnoDB(另一种数据库引擎)。

下面这张图只是想表达的意思是现在大多数时候我们使用的都是InnoDB存储引擎,但是在某些情况下使用MyISAM更好,比如:MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。

1.2 MyISAM特点

  • 不支持行锁(MyISAM只有表锁),读取时对需要读到的所有表加锁,写入时则对表加排他锁;
  • 不支持事务
  • 不支持外键
  • 不支持崩溃后的安全恢复
  • 在表有读取查询的同时,支持往表中插入新纪录
  • 支持BLOB和TEXT的前500个字符索引,支持全文索引
  • 支持延迟更新索引,极大地提升了写入性能
  • 对于不会进行修改的表,支持 压缩表 ,极大地减少了磁盘空间的占用

补充概念:

Mysql的行锁和表锁( 锁是计算机协调多个进程或纯线程并发访问某一资源的机制) 表级锁: 每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低; 行级锁: 每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;

二 InnoDB

2.1 InnoDB简介

InnoDB是MySQL的默认数据库引擎(5.5版之后),2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能。

2.2 InnoDB特点

  • 支持行锁,采用MVCC来支持高并发,有可能死锁
  • 支持事务
  • 支持外键
  • 支持崩溃后的安全恢复
  • 不支持全文索引

三 关于二者的对比与总结

3.1 二者的常见对比

1) count运算上的区别: 因为MyISAM缓存有表meta-data(行数等),因此在做COUNT(*)时对于一个结构很好的查询是不需要消耗多少资源的。而对于InnoDB来说,则没有这种缓存。

2) 是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。但是InnoDB 提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

3)是否支持外键: MyISAM不支持,而InnoDB支持。

3.2 总结

MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。

一般来说,如果需要事务支持,并且有较高的并发读取频率(MyISAM的表锁的粒度太大,所以当该表写并发量较高时,要等待的查询就会很多了),InnoDB是不错的选择。如果你的数据量很大(MyISAM支持压缩特性可以减少磁盘的空间占用),而且不需要支持事务时,MyISAM是最好的选择。

参考:https://juejin.im/post/5b1685bef265da6e5c3c1c34

最新文章

  1. About “this” of Javascript
  2. 让Docker使用国内的镜像服务
  3. 新增WiFi真机同步与实时预览功能 简化真机调试步骤
  4. MySQL之不能保存表格问题
  5. 转载---SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除
  6. Servlet的getContextPath(), getServletPath(), getRequestURI(), getRealPath("/")
  7. 基于Java 的增量与完全备份小工具
  8. LeetCode(50)-Word Pattern
  9. react native 1跳2 2跳3 3跳4 4pop回2
  10. codeforces 787D - Legacy 线段树优化建图,最短路
  11. IEDA的程序调试debug
  12. bind,unbind,one
  13. php 当前时间 当前时间戳和数据库里取出的时间datetime格式进行比较大小
  14. 论 大并发 下的 乐观锁定 Redis锁定 和 新时代事务
  15. Vue -- 项目报错整理(1):RangeError: Maximum call stack size exceeded
  16. Centos中安装和配置vsftp简明教程
  17. C# 二种方法控制系统音量/麦克风大小
  18. grub2 详解
  19. python 书籍推荐 二
  20. mysql安装使用详细教程

热门文章

  1. 一步步打造自己的纯CSS单标签图标库
  2. jdk1.5之后,classpath不需要再配置
  3. Linux进程操作记录
  4. MacOS麦克风输入监听的方法
  5. django 验证码图片生成视图函数
  6. python之二分法求平方根
  7. 【Weiss】【第03章】练习3.17:懒惰删除
  8. 【Weiss】【第03章】栈例程
  9. 基于.NetCore3.1搭建项目系列 —— 使用Swagger做Api文档 (下篇)
  10. XSS构造剖析