MySQL 的存储引擎中,InnoDB 和 MyISAM 有什么区别?
1.数据表锁定方式不同。
MyISAM 引擎采用的是表锁定方式,也就是说,如果一条记录被锁定,整张表都无法被其他用户访问。
InnoDB 引擎采用的是行锁定方式,也就是说,在修改一条记录时,只锁定该行记录,其他行记录仍然可以被访问。
2.事务支持不同。
InnoDB 引擎支持事务(ACID),MyISAM 引擎不支持事务。
3.崩溃恢复能力不同。
InnoDB 引擎具有很好的崩溃恢复能力,可以通过 redo log 和 undo log 来进行数据的恢复。
MyISAM 引擎仅仅支持修复被破坏的索引,而不能修复数据。
4.数据缓存方式不同。
InnoDB 引擎使用的是基于磁盘的缓存机制,可以直接将数据缓存在磁盘中,这种方式可以支持大容量和高并发。
MyISAM 引擎使用的是基于内存的缓存机制,可以在内存中缓存数据,缓存空间较小,但响应速度较快。
5.索引存储方式不同。
InnoDB 引擎如果没有显式地指定主键或唯一键,会自动为每个表创建一个名为 PRIMARY 或 UNIQUE 的聚簇索引。
MyISAM 引擎的索引存储在两个文件中,数据文件和索引文件,数据文件包含数据记录,而索引文件包含指向数据文件中记录的指针。
综上所述,InnoDB 引擎相比 MyISAM 引擎更加适合需要数据完整性保证和高并发支持的应用场景,而 MyISAM 引擎则更适用于查询频繁的场景。
-
上一篇
MySQL 的存储引擎中,InnoDB 和 MyISAM 有什么区别?
<p>一、<strong>MyISAM 和 InnoDB 的区别有哪些?</strong></p><p>1.InnoDB 支持事务,MyISAM 不支持。对于 InnoDB 每一条 SQL 语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条 SQL 语言放在 begin 和 commit 之间,组成一个事务。</p><p><br></p><p>2.InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败。</p><p><br></p><p>3.InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。</p><p><br></p><p>4.InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而 MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快。</p><p><br></p><p>5.Innodb 不支持全文索引,而 MyISAM 支持全文索引,查询效率上 MyISAM 要高。</p><p><br></p><p><br></p><p><br></p><p><br></p><p>二、<strong>如何选择 MyISAM 和 InnoDB?</strong></p><p>1.是否要支持事务,如果要请选择 innodb,如果不需要可以考虑 MyISAM。</p><p><br></p><p>2.如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读写也挺频繁,请使用 InnoDB。</p><p><br></p><p>3.系统奔溃后,MyISAM 恢复起来更困难,能否接受。</p><p><br></p><p>4.MySQL5.5 版本开始 Innodb 已经成为 MySQL 的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用 InnoDB,至少不会差。</p><p><br></p>
-
下一篇
MySQL 的存储引擎中,InnoDB 和 MyISAM 有什么区别?
MySQL 的存储引擎中,InnoDB 和 MyISAM 有什么区别?
相关文章
- 聊一下高并发和高性能的区别和联系?
- 如何在Golang中实现单例模式?
- PHP中常用的设计模式有哪些?
- PHP中如何处理文件上传和下载?
- 如何通过PHP来保护您的代码免受SQL注入攻击?
- 请解释下PHP中会话(session)和Cookie(cookie)的作用。
- 请解释一下PHP中的MVC模式是如何工作的?
- 请解释什么是defer语句,以及它有什么作用?
- 请给一个例子解释一下PHP中的闭包函数是什么?
- 在PHP中,Magic Method都有哪些,并举例说明它们的作用?
- 请举例说明PHP中如何处理异常?
- 请解释HTTP的基本概念,以及在Golang中如何使用HTTP?
- PHP中如何进行单元测试以及如何在开发过程中保证代码质量?
- PHP7和PHP5的性能上有什么差别?
- 请描述在Golang中使用MongoDB时的最佳实践。
- 请问PHP中如何实现多线程?
- 请列出与PHP相关的缓存机制及其优缺点。
- 如何在Golang中进行并发编程?
- 请提供至少三个通过PHP实现的网站性能优化技巧。
- 请谈谈您对PHP的垃圾回收机制的了解及实践。
微信收款码
支付宝收款码