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 会根据数据的使用频率等因素,自动对数据进行缓存和管理,以提高访问性能。
相关推荐
b***59431 分钟前
LangChain-08 Query SQL DB 通过GPT自动查询SQL
数据库·sql·langchain
u***324327 分钟前
【MySQL】数据库和表的操作
数据库·mysql·oracle
好奇的菜鸟32 分钟前
MySQL 8 开启远程登录
数据库·mysql·adb
是2的10次方啊1 小时前
MySQL索引设计原则:明明建了索引为什么还是慢?7条实战原则帮你避坑
mysql
('-')1 小时前
《从根上理解MySQL是怎样运行的》第十二章学习笔记
笔记·学习·mysql
Boop_wu1 小时前
[Java EE] 多线程编程进阶
java·数据库·java-ee
深瞳智检2 小时前
学习应用 第001期-Windows 10 用 CMD 安装 MySQL 全流程解析(免安装版)
数据库·windows·mysql·压缩包·环境安装
正在走向自律2 小时前
金仓数据库在发电行业的创新应用与实战案例
数据库·国产数据库·电力·kingbasees·电科金仓
华纳云IDC服务商2 小时前
MySQL数据库如何防止SQL注入攻击
数据库·sql·mysql
合作小小程序员小小店2 小时前
桌面开发,在线%物品代送,代接管理%系统,基于vs2022,c#,winform,sql server数据。
开发语言·数据库·sql·microsoft·c#