Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_Guidehtml
MyISAM是MySQL的默认数据库引擎(5.5版以前),由早期的 ISAM (Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,并且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,并且最大的缺陷就是崩溃后没法安全恢复。不过,5.5版本以后,MySQL引入了InnoDB(另外一种数据库引擎)。git
下面这张图只是想表达的意思是如今大多数时候咱们使用的都是InnoDB存储引擎,可是在某些状况下使用MyISAM更好,好比:MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库作主从分离的状况下,常常选择MyISAM做为主库的存储引擎。github
补充概念:面试
Mysql的行锁和表锁( 锁是计算机协调多个进程或纯线程并发访问某一资源的机制)
表级锁: 每次操做锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的几率最高,并发度最低;
行级锁: 每次操做锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的几率最低,并发度也最高;
InnoDB是MySQL的默认数据库引擎(5.5版以后),2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特点就是支持了ACID兼容的事务(Transaction)功能。sql
1) count运算上的区别: 由于MyISAM缓存有表meta-data(行数等),所以在作COUNT(*)时对于一个结构很好的查询是不须要消耗多少资源的。而对于InnoDB来讲,则没有这种缓存。数据库
2) 是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具备原子性,其执行数度比InnoDB类型更快,可是不提供事务支持。可是InnoDB 提供事务支持事务,外部键等高级数据库功能。 具备事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。缓存
3)是否支持外键: MyISAM不支持,而InnoDB支持。安全
MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库作主从分离的状况下,常常选择MyISAM做为主库的存储引擎。服务器
通常来讲,若是须要事务支持,而且有较高的并发读取频率(MyISAM的表锁的粒度太大,因此当该表写并发量较高时,要等待的查询就会不少了),InnoDB是不错的选择。若是你的数据量很大(MyISAM支持压缩特性能够减小磁盘的空间占用),并且不须要支持事务时,MyISAM是最好的选择。微信
欢迎关注个人微信公众号:" Java面试通关手册"(一个有温度的微信公众号,无广告,单纯技术分享,期待与你共同进步~~~坚持原创,分享美文,分享各类Java学习资源)
最后,就是使用阿里云服务器一段时间后,感受阿里云真的很不错,就申请作了阿里云大使,而后这是个人优惠券地址.