Mysql面试题----MyISAM和InnoDB的区别

数据存储结构

  • MyISAM:将表数据和索引分开存储,数据文件和索引文件分别以.MYD 和.MYI 为扩展名。数据文件按照记录插入的顺序存储,索引文件则是 B + 树结构,叶子节点存储的是数据记录的物理地址。
  • InnoDB:采用聚集索引的方式存储数据,将数据和索引存储在同一个文件中,通常以.ibd 为扩展名。表数据按照主键的顺序存储在聚簇索引的叶子节点中,如果没有显式定义主键,InnoDB 会选择一个唯一的非空索引作为聚簇索引的键,如果没有这样的索引,InnoDB 会自动生成一个隐藏的主键。

事务支持

  • MyISAM:不支持事务,这意味着在执行多个操作时,如果出现错误,无法进行回滚操作来保证数据的一致性。它适用于对事务要求不高,以读操作为主的应用场景,如一些简单的博客系统、数据仓库等。
  • InnoDB:支持事务,遵循 ACID 特性(原子性、一致性、隔离性、持久性),能够保证在事务执行过程中,数据的完整性和一致性。它提供了多种事务隔离级别,可以根据具体的业务需求进行选择。

锁机制

  • MyISAM:采用表级锁,即在执行操作时,会对整个表进行锁定。这意味着在同一时间内,只能有一个线程对表进行写操作,读操作可以并发进行,但写操作会阻塞读操作和其他写操作,并发性能较差。
  • InnoDB:支持行级锁和表级锁,默认采用行级锁。行级锁可以精确地控制对数据行的访问,在并发操作时,只有涉及到的行才会被锁定,其他行可以被其他线程并发访问,大大提高了并发性能,但行级锁的实现相对复杂,会带来一定的性能开销。

数据完整性

  • MyISAM:在数据完整性方面的支持相对较弱,不支持外键约束等功能。在进行数据插入、更新和删除操作时,不会自动检查数据之间的关联关系,需要在应用层进行额外的逻辑处理来保证数据的完整性。
  • InnoDB:支持外键约束,能够在数据库层面保证数据的完整性和一致性。当定义了外键关系后,InnoDB 会自动检查插入、更新和删除操作是否违反外键约束,如果违反,则会抛出错误,阻止操作的执行。

崩溃恢复能力

  • MyISAM:崩溃恢复能力相对较弱,在数据库崩溃后,可能需要手动进行修复操作,如使用工具检查和修复表结构和数据。
  • InnoDB:具有强大的崩溃恢复能力,它通过事务日志(redo log 和 undo log)来记录数据的更改操作。在数据库崩溃后,InnoDB 可以根据事务日志中的信息,自动进行崩溃恢复,将数据库恢复到崩溃前的一致性状态。

存储特点

  • MyISAM:表存储格式有静态、动态和压缩三种。静态表的列长度固定,访问速度快,但会浪费一定的存储空间;动态表的列长度可变,节省存储空间,但访问速度相对较慢;压缩表用于只读数据,可大大节省存储空间。
  • InnoDB:存储格式较为统一,主要是按照页为单位进行存储,页大小通常为 16KB。InnoDB 会根据数据的使用频率等因素,自动对数据进行缓存和管理,以提高访问性能。
相关推荐
空杆推不起3 分钟前
穿透数据库 JOIN 核心:语法分类、底层算法、生产优化与高频坑点全解析
数据库·oracle
xxwl58512 分钟前
数据库后端接口测试报告
spring boot·mysql·tomcat
xqqxqxxq39 分钟前
MySQL 数据类型笔记
数据库·笔记·mysql
Logintern091 小时前
理解MySQL数据库的“事务与锁”
数据库·mysql
朱容zr3331331 小时前
为什么推荐使用自增主键?使用UUID作为主键的优缺点是什么?
java·运维·数据库·后端·mysql·面试·性能优化
麻瓜code1 小时前
【Redis 】数据类型、持久化与过期删除
数据库·redis·缓存
空杆推不起2 小时前
穿透 Flink CDC 表层用法:数据库日志捕获机制、Flink Source 运行时、端到端一致性底层原理详解
大数据·数据库·flink
朱容zr3331332 小时前
请解释“回表”的概念。
java·前端·数据库
大黄说说2 小时前
EF Core 避坑指南:查询慢、循环查询、并发更新问题如何解决
java·服务器·数据库
城管不管2 小时前
重生——第五次面试2026.8.1一面
java·数据库·后端·ai·面试·职场和发展·agent