MySQL 存储引擎:特点、区别与选型原则

文章目录

    • 一、什么是存储引擎(一句话版)
    • [二、InnoDB vs MyISAM 核心区别总览(必背表)](#二、InnoDB vs MyISAM 核心区别总览(必背表))
    • [三、InnoDB 特点(面试重点)](#三、InnoDB 特点(面试重点))
      • [1️⃣ 支持事务(ACID)](#1️⃣ 支持事务(ACID))
      • [2️⃣ 行级锁 + MVCC(高并发神器)](#2️⃣ 行级锁 + MVCC(高并发神器))
      • [3️⃣ 崩溃恢复能力强](#3️⃣ 崩溃恢复能力强)
      • [4️⃣ 聚簇索引(必须会说)](#4️⃣ 聚簇索引(必须会说))
    • [四、MyISAM 特点(现在主要是"认识即可")](#四、MyISAM 特点(现在主要是“认识即可”))
      • [1️⃣ 不支持事务、不支持行锁](#1️⃣ 不支持事务、不支持行锁)
      • [2️⃣ 读性能高(历史原因)](#2️⃣ 读性能高(历史原因))
      • [3️⃣ 崩溃风险大](#3️⃣ 崩溃风险大)
    • 五、存储引擎的选择原则(面试标准答案)
      • [✅ 90% 场景:InnoDB](#✅ 90% 场景:InnoDB)
      • [⚠️ 特殊场景:MyISAM(了解即可)](#⚠️ 特殊场景:MyISAM(了解即可))
    • [六、如何查看 & 配置存储引擎(实操必会)](#六、如何查看 & 配置存储引擎(实操必会))
      • [1️⃣ 查看当前 MySQL 支持的引擎](#1️⃣ 查看当前 MySQL 支持的引擎)
      • [2️⃣ 查看某张表的存储引擎](#2️⃣ 查看某张表的存储引擎)
      • [3️⃣ 建表时指定存储引擎](#3️⃣ 建表时指定存储引擎)
      • [4️⃣ 修改表的存储引擎](#4️⃣ 修改表的存储引擎)
      • [5️⃣ 设置默认存储引擎](#5️⃣ 设置默认存储引擎)

一、什么是存储引擎(一句话版)

存储引擎 = 表的"数据存放方式 + 读写规则"

  • 同一个 MySQL

  • 不同表

  • 可以用不同存储引擎

就像同一栋楼里:

  • 有的房间是钢筋混凝土(InnoDB)

  • 有的是木结构(MyISAM)


二、InnoDB vs MyISAM 核心区别总览(必背表)

维度 InnoDB(默认) MyISAM
事务 ✅ 支持(ACID) ❌ 不支持
行级锁 表级锁
并发性能 ⭐⭐⭐⭐
外键 ✅ 支持 ❌ 不支持
崩溃恢复 ✅ redo / undo ❌ 易损
MVCC
适合场景 高并发、核心业务 读多写少、统计类
MySQL 8 默认

👉 一句话记忆法

要安全、要并发、要事务 → InnoDB
要快读、要简单、不怕挂 → MyISAM


三、InnoDB 特点(面试重点)

1️⃣ 支持事务(ACID)

  • 原子性、一致性、隔离性、持久性

  • Spring 事务底层默认依赖 InnoDB

面试雷点

"Spring 事务失效有可能是因为表不是 InnoDB"


2️⃣ 行级锁 + MVCC(高并发神器)

  • 更新一行 ≠ 锁整张表

  • 读写并发不卡顿

  • 多版本并发控制(快照读)

📌 典型场景:

  • 下单

  • 扣库存

  • 转账


3️⃣ 崩溃恢复能力强

  • redo log + undo log

  • MySQL 异常宕机,重启后能自动恢复


4️⃣ 聚簇索引(必须会说)

  • 主键索引 = 数据本身

  • 二级索引保存的是 主键值

二级索引 -> 主键 -> 数据

❗ 面试追问:

为什么 InnoDB 推荐使用自增主键?


四、MyISAM 特点(现在主要是"认识即可")

1️⃣ 不支持事务、不支持行锁

  • 更新一条数据

  • 整张表被锁住 😵


2️⃣ 读性能高(历史原因)

  • 索引和数据分开存

  • 全表扫描、统计速度快


3️⃣ 崩溃风险大

  • 容易表损坏

  • 修复成本高

👉 所以:

生产环境几乎不用 MyISAM 了


五、存储引擎的选择原则(面试标准答案)

✅ 90% 场景:InnoDB

业务 推荐
用户、订单、支付 InnoDB
高并发接口 InnoDB
有事务需求 InnoDB
微服务 InnoDB

⚠️ 特殊场景:MyISAM(了解即可)

场景 原因
只读数据 结构简单
历史归档 不需要事务
临时统计表 追求极致读

六、如何查看 & 配置存储引擎(实操必会)

1️⃣ 查看当前 MySQL 支持的引擎

SHOW ENGINES;


2️⃣ 查看某张表的存储引擎

SHOW TABLE STATUS LIKE 'user';

SHOW CREATE TABLE user;


3️⃣ 建表时指定存储引擎

CREATE TABLE user ( id BIGINT PRIMARY KEY, name VARCHAR(50) ) ENGINE=InnoDB;


4️⃣ 修改表的存储引擎

ALTER TABLE user ENGINE=InnoDB;

⚠️ 生产环境操作要谨慎,可能锁表


5️⃣ 设置默认存储引擎

SHOW VARIABLES LIKE 'default_storage_engine';

SET default_storage_engine=InnoDB;


相关推荐
Hrain-AI9 小时前
多 Agent 并行不打架:worktree 隔离与反馈回流落地(附脚本)
网络·数据库·人工智能·架构
净水深流9 小时前
中央厨房冷链技术实践:多温区改造、WMS落地与IoT温控架构
大数据·数据库·人工智能·冷库冷链
l1t10 小时前
测试DuckDB 2.1的match_recognize模式匹配语句
数据库·duckdb
IpdataCloud11 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
曹牧11 小时前
Java:SQL 注入漏洞
数据库
程序员JerrySUN12 小时前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
oradh12 小时前
Oracle Undo问题总结(ORA-600 [4xxx] 系列错误)
数据库·oracle
达梦数据12 小时前
DMDRS辅助表生成规则与作用
数据库·oracle
‎ദ്ദിᵔ.˛.ᵔ₎12 小时前
MySQL 表约束
数据库·mysql
Doris__HE12 小时前
【元脑服务器NF5476G7-NF5476M7技术规格分享】
运维·服务器·网络·数据库·性能优化