资讯专栏INFORMATION COLUMN

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

BWrong / 1993人阅读

摘要:虽然性能极佳,而且提供了大量的特性,包括全文索引压缩空间函数等,但不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。

一 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 MyISAM简介

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

2.2 MyISAM特点

支持行锁,采用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是最好的选择。

本文作者:snailclimb
阅读原文
本文为云栖社区原创内容,未经允许不得转载。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11368.html

相关文章

  • MySQL常见两种存储引擎MyISAMInnoDB爱恨情仇

    摘要:虽然性能极佳,而且提供了大量的特性,包括全文索引压缩空间函数等,但不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。 Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_Guide 一 MyISAM 1.1 MyISAM简介 MyISAM是MySQL的默认数据库引擎(5.5...

    gougoujiang 评论0 收藏0
  • 关于MySQL知识点面试常见问题都在这里

    摘要:串行最高的隔离级别,完全服从的隔离级别。但是这将严重影响程序的性能。此外,垂直分区可以简化表的结构,易于维护。 我自己总结的Java学习的一些知识点以及面试问题,目前已经开源,会一直完善下去,欢迎建议和指导欢迎Star: https://github.com/Snailclimb/Java_Guide 书籍推荐 《高性能MySQL : 第3版》 文字教程推荐 MySQL 教程(菜鸟教程...

    hss01248 评论0 收藏0
  • 关于MySQL知识点面试常见问题都在这里

    摘要:串行最高的隔离级别,完全服从的隔离级别。但是这将严重影响程序的性能。此外,垂直分区可以简化表的结构,易于维护。 我自己总结的Java学习的一些知识点以及面试问题,目前已经开源,会一直完善下去,欢迎建议和指导欢迎Star: https://github.com/Snailclimb/Java_Guide 书籍推荐 《高性能MySQL : 第3版》 文字教程推荐 MySQL 教程(菜鸟教程...

    newtrek 评论0 收藏0

发表评论

0条评论

BWrong

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<