MySQL如何选择MyISAM和InnoDB引擎,有什么区别

数据库 投稿 58900 0 评论

MyISAM引擎:是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。

InnoDB引擎:是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。

一、InnoDB引擎

优点

  1. 支持事务处理、ACID事务特性;

  2. 实现了SQL标准的四种隔离级别;

  3. 支持行级锁和外键约束;

  4. 可以利用事务日志进行数据恢复。

  5. 锁级别为行锁,行锁优点是适用于高并发的频繁表修改,高并发是性能优于 MyISAM。缺点是系统消耗较大。

  6. 索引不仅缓存自身,也缓存数据,相比 MyISAM 需要更大的内存。

缺点

因为它没有保存表的行数,当使用COUNT统计时会扫描全表。

二、MyISAM引擎

优点

  1. 高性能读取;

  2. 因为它保存了表的行数,当使用COUNT统计时不会扫描全表;

缺点

  1. 锁级别为表锁,表锁优点是开销小,加锁快;缺点是锁粒度大,发生锁冲动概率较高,容纳并发能力低,这个引擎适合查询为主的业务。

  2. 此引擎不支持事务,也不支持外键。

  3. INSERT和UPDATE操作需要锁定整个表;

  4. 它存储表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。

三、总结

  • MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键,如果执行大量的select,insert MyISAM比较适合。

  • InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。

编程笔记 » MySQL如何选择MyISAM和InnoDB引擎,有什么区别

赞同 (75) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽