MyISAM和InnoDB

事务

MyISAM不支持事务

它的设计着重于性能和速度,而不是事务的 ACID 属性(原子性、一致性、隔离性和持久性)

具体原因:

1.表级锁定:MyISAM使用表级锁定来管理并发访问,这意味着当一个会话在对表进行写操作时,其他会话无法读取或写入同一表中的数据。这种锁定机制不能提供足够的隔离性,因此无法支持事务。

2.不支持回滚:MyISAM引擎不支持事务回滚。如果在一个事务中发生了错误,无法将已经执行的操作回滚到事务开始之前的状态。

3.不支持崩溃恢复:MyISAM不提供事务日志和崩溃恢复功能。如果数据库发生了崩溃,可能会导致数据丢失或损坏。

4.不支持一致性:MyISAM表在发生故障或崩溃时,可能会出现数据不一致的情况,因为它不提供事务的一致性保证。

InnoDB支持事务

1.行级锁定:InnoDB使用行级锁定来管理并发访问,这意味着它可以在不影响其他事务的情况下,对表中的特定行进行修改。行级锁定提供了更好的并发控制,使得多个事务可以同时对同一表进行读取和写入操作。

2.事务日志:InnoDB引擎支持事务日志,它会将每个事务的操作记录到事务日志中。这样做的好处是即使发生了系统崩溃,数据库也可以通过重放事务日志来恢复到崩溃之前的状态,从而保证了数据的一致性和持久性。

3.ACID属性:InnoDB引擎遵循ACID属性(原子性、一致性、隔离性和持久性),这意味着它可以确保事务在数据库中的操作是原子的、一致的、隔离的和持久的。

4.崩溃恢复:由于InnoDB支持事务日志和行级锁定,因此它可以在系统崩溃或异常情况下保持数据的一致性,并能够在恢复时确保事务的完整性。

缓存机制 

MyISAM 存储引擎采用的是基于文件的缓存机制,它会缓存整个表的数据和索引。

1.由于 MyISAM 使用表级锁定,所以它的缓存机制相对简单,一次性读取整个表到内存中,适用于读密集型的应用场景。

2.MyISAM 的数据缓存被称为 Key Cache,它将表中的数据按照索引方式存储在内存中,这样可以加快对表的访问速度。

InnoDB 存储引擎采用的是基于页的缓存机制,它会缓存数据和索引的页面,不是整个表。

1.InnoDB 的数据和索引缓存被称为 Buffer Pool,它将数据和索引的页面按照 LRU(最近最少使用)算法进行管理,并且可以自动调整大小。

2.InnoDB 的缓存机制更加灵活,可以根据需求动态地调整缓存大小,适用于读写混合型的应用场景。

存储方式

MyISAM 存储引擎以表为单位将数据和索引存储在不同的文件中。数据文件以 .MYD 扩展名存储表的实际数据,索引文件以 .MYI 扩展名存储表的索引信息。

InnoDB 存储引擎将表的数据和索引统一存储在一个文件中,这个文件通常称为表空间文件。InnoDB 使用自己的方式管理数据和索引的存储,采用行级存储方式,每行数据包含着完整的记录,包括索引键和数据。

外键 

MyISAM 存储引擎不支持外键约束。在 MyISAM 表中定义外键约束是合法的,但 MySQL 会忽略这些定义,因此外键约束不会起到任何作用。这意味着 MyISAM 表中的数据之间的关联关系必须由应用程序或者触发器来保证,而不是由数据库引擎本身。

InnoDB 存储引擎支持外键约束。在 InnoDB 表中定义外键约束是合法且有效的,MySQL 会根据外键约束来确保数据之间的关联关系的完整性和一致性。这意味着可以在 InnoDB 表中定义外键,指定外键关系,并且在需要时触发外键约束来执行相应的动作(如级联更新、级联删除等)。

全文索引

MyISAM 存储引擎支持全文索引。在 MyISAM 表上创建全文索引可以提高对文本字段的搜索性能,使得可以进行更为复杂和高效的文本搜索操作。全文索引可以加速对文本内容的模糊搜索、全文检索等操作。

InnoDB 存储引擎在早期版本中不支持全文索引,但从 MySQL 5.6 版本开始,InnoDB 引入了对全文索引的支持。从此版本开始,InnoDB 表可以创建全文索引,从而可以享受到全文索引带来的搜索性能提升。

索引格式

MyISAM 存储引擎的索引格式采用 B+ 树结构存储在索引文件中,其中叶子节点存储数据记录的地址。MyISAM 索引文件的存储格式比较简单,支持基本的索引功能。

InnoDB 存储引擎的主键索引采用聚簇索引存储方式,即主键索引和数据行存储在一起,而非主键索引采用辅助索引存储方式。InnoDB 的索引文件也采用 B+ 树结构,但是它的索引文件和数据文件是集成在一起的,具有更高的索引效率和性能。

应用场景 

适用于 MyISAM 存储引擎的应用场景包括:

读频繁、写少的场景:MyISAM 存储引擎适合读操作频繁,写操作较少的场景。由于 MyISAM 表的读取效率高,索引文件简单,适合于大量的查询操作。

对事务一致性要求不高的场景:MyISAM 存储引擎不支持事务和行级锁,因此不适合对数据一致性要求较高的应用场景。如果应用不需要事务支持,可以考虑使用 MyISAM 存储引擎。需要全文搜索功能的场景:MyISAM 存储引擎支持全文索引功能,可以用于需要进行全文搜索的应用场景,如博客、新闻、论坛等网站。

适用于 InnoDB 存储引擎的应用场景包括:

高并发读写的场景:InnoDB 存储引擎支持行级锁和事务,适合高并发读写的应用场景。由于 InnoDB 存储引擎能够提供更好的并发控制和数据一致性,因此适合于要求高并发读写的应用场景。

对事务一致性要求高的场景:InnoDB 存储引擎支持事务,具有较强的事务一致性和数据完整性保证,适合对数据一致性要求较高的应用场景,如金融、电子商务等。

需要外键约束的场景:InnoDB 存储引擎支持外键约束,可以保证数据之间的关联关系完整性,适合需要建立复杂数据关系的应用场景。

对存储空间利用率和性能要求较高的场景:InnoDB 存储引擎支持行级别的压缩和存储优化技术,可以提高存储空间利用率和查询性能,适合对存储空间和性能有要求的应用场景。

相关推荐

  1. MyISAMInnoDB

    2024-03-30 15:00:05       18 阅读
  2. MyISAM InnoDB 如何选择?

    2024-03-30 15:00:05       29 阅读
  3. 【Mysql】myisaminnodb的区别?

    2024-03-30 15:00:05       35 阅读
  4. INNODBMyISAM有什么区别

    2024-03-30 15:00:05       13 阅读
  5. Mysql数据库——InnoDBMyISAM区别与联系

    2024-03-30 15:00:05       15 阅读
  6. 【mysql】MyISAMInnoDB区别

    2024-03-30 15:00:05       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-30 15:00:05       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-30 15:00:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-30 15:00:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-30 15:00:05       20 阅读

热门阅读

  1. C++开源项目研究——gh0st远控(一)

    2024-03-30 15:00:05       18 阅读
  2. 华为NPU下安装apex

    2024-03-30 15:00:05       17 阅读
  3. DevOps流动:技术视角与价值流视角互为补充

    2024-03-30 15:00:05       17 阅读
  4. Golang基础-6

    2024-03-30 15:00:05       16 阅读