MyISAM 和 InnoDB 的区别和优缺点

MyISAM 和 InnoDB 的区别和优缺点

区别MyISAMInnoDB
事务不支持支持
存储结构每个MyISAM在磁盘上存储成三个文件所有的表都保存在同一个数据文件中
存储空间可被压缩,存储空间较小会在主内存中建立其专用的缓冲池(需要更多内存和存储)
可移植性跨平台的数据转移中会很方便,在备份和恢复时可单独针对某个表进行操作拷贝数据文件、备份 binlog,或者用 mysqldump
事务支持每次查询具有原子性,但不支持事务提供事务支持事务
表锁差异只支持表级锁支持行级锁
全文索引支持不支持
表主键允许没有任何索引和主键的表存在如果未设置主键,会自动生成
表总行数保存有没有保存
CURD对于select支持更好INSERT/DELETE支持更好
外键不支持支持
查询效率小型应用可以考虑使用高并发、复杂情况表现更优
1.1 MyISAM和InnoDB简介

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

不过,5.5版本之后,MySQL引入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。与传统的ISAMMyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。

现在大多数时候我们使用的都是InnoDB存储引擎,但是在某些情况下使用MyISAM更好,比如:MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎(最后一句有待验证,因为主库负责对外提供写服务,从库对外提供读服务)。

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

补充概念:Mysql的行锁表锁( 锁是计算机协调多个进程或纯线程并发访问某一资源的机制)

表级锁: 每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;
行级锁: 每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;

1.3 InnoDB特点
  • 支持行锁,采用MVCC来支持高并发,有可能死锁
  • 支持事务
  • 支持外键
  • 支持崩溃后的安全恢复
  • 不支持全文索引
1.4 MyISAM和InnoDB两者的应用场景:
  1. MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
  2. InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
InnoDBMyISAM是MySQL数据库中的两种存储引擎,它们各有优缺点InnoDB的优点包括: 1. 事务支持:InnoDB支持ACID(原子性、一致性、隔离性和持久性)事务,可以保证数据的一致性和完整性。 2. 行级锁定:InnoDB使用行级锁定,允许并发操作,提高了多用户并发访问的效率。 3. 外键约束:InnoDB支持外键约束,可以保证数据的完整性和一致性。 4. Crash Recovery:InnoDB具有自动崩溃恢复功能,可以在数据库崩溃后自动进行恢复。 然而,InnoDB也有一些缺点: 1. 占用更多的磁盘空间:InnoDB使用了更多的磁盘空间来存储数据和索引。 2. 性能相对较低:由于InnoDB实现了较多的功能和复杂的事务处理机制,相比MyISAM,其性能可能稍低。 MyISAM的优点包括: 1. 占用较少的磁盘空间:MyISAM使用较少的磁盘空间来存储数据和索引。 2. 性能较高:由于MyISAM不支持事务处理等复杂功能,相对而言,其性能可能更高。 3. 全文索引支持:MyISAM支持全文索引,可以提供更快速和高效的全文搜索功能。 然而,MyISAM也有一些缺点: 1. 不支持事务:MyISAM不支持事务处理,无法保证数据的完整性和一致性。 2. 表级锁定:MyISAM使用表级锁定,当有并发操作时,可能会导致性能下降和冲突。 3. 崩溃恢复较慢:MyISAM在数据库崩溃后的恢复速度相对较慢。 综上所述,选择合适的存储引擎取决于具体的应用需求。如果需要事务支持、并发操作以及数据完整性、一致性等方面的功能,则推荐使用InnoDB。如果对性能要求较高,且不需要事务支持和复杂的功能,则可以考虑使用MyISAM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值