一、一句话核心区别(先给结论)
MySQL 更偏"快、简单、工程化"
PostgreSQL 更偏"严谨、强大、学术 + 企业级"
如果只记一句话:
-
MySQL = 高并发 OLTP、互联网业务
-
PostgreSQL = 复杂查询、强一致性、复杂数据结构
二、架构与内核差异(本质区别)
1️⃣ 并发控制(非常关键)
🔹 MySQL(InnoDB)
-
使用 MVCC + Undo Log
-
更新数据时:
-
旧版本写入 Undo Log
-
新数据直接写回表
-
-
优点:实现简单、性能好
-
缺点:
-
Undo Log 膨胀
-
长事务影响明显
-
🔹 PostgreSQL
-
真正的 MVCC(多版本存储)
-
更新数据时:
-
不覆盖原行
-
新行插入一条新记录
-
-
优点:
-
读写几乎不阻塞
-
强一致性
-
-
缺点:
-
表会"变胖"
-
需要 VACUUM 回收
-
👉 结论:
-
并发读写复杂场景:PG 更稳
-
简单高并发:MySQL 更轻
2️⃣ 锁机制
| 对比项 | MySQL | PostgreSQL |
|---|---|---|
| 行锁 | 有 | 有 |
| 表锁 | 有 | 有 |
| 间隙锁 | ✔(防幻读) | ❌ |
| 乐观并发 | 一般 | 强 |
📌 MySQL 的间隙锁 在高并发下容易"锁住一片数据",
PG 不存在这个问题。
三、SQL 能力 & 标准支持(PG 明显更强)
1️⃣ SQL 标准支持
| 能力 | MySQL | PostgreSQL |
|---|---|---|
| SQL 标准 | 一般 | ⭐⭐⭐⭐⭐ |
| CTE(WITH) | ✔ | ✔(更强) |
| Window Function | ✔ | ✔(更全) |
| 子查询优化 | 一般 | 很强 |
👉 复杂 SQL、报表、分析类查询 → PG 完胜
2️⃣ 数据类型(PG 碾压)
PostgreSQL 支持:
-
JSON / JSONB(可索引) -
ARRAY -
HSTORE -
UUID -
ENUM -
RANGE -
GEOMETRY(GIS)
MySQL:
-
JSON(功能较弱)
-
基本类型为主
📌 PG 可以当"半 NoSQL 数据库"用。
3️⃣ 索引类型(PG 极强)
| 索引类型 | MySQL | PostgreSQL |
|---|---|---|
| B-Tree | ✔ | ✔ |
| Hash | ⚠️(基本不用) | ✔ |
| GIN | ❌ | ✔ |
| GiST | ❌ | ✔ |
| BRIN | ❌ | ✔ |
| 全文索引 | 一般 | 强 |
👉 搜索、JSON、数组、地理数据 → PG 无敌
四、事务与一致性(PG 更"严格")
1️⃣ 事务隔离级别
| 隔离级别 | MySQL | PostgreSQL |
|---|---|---|
| Read Uncommitted | ❌(等同 RC) | ❌ |
| Read Committed | ✔ | ✔ |
| Repeatable Read | ✔(默认) | ✔ |
| Serializable | ⚠️ | ✔(真正) |
📌 PG 的 Serializable 是严格可串行化 ,
MySQL 更偏工程实现。
2️⃣ 约束 & 数据完整性
| 特性 | MySQL | PostgreSQL |
|---|---|---|
| 外键 | ⚠️(不常用) | ✔ |
| Check 约束 | 8.0 才完善 | ✔ |
| 约束严格性 | 一般 | 非常严格 |
👉 金融、账务系统更偏向 PG
五、性能对比(不要被"谁更快"误导)
1️⃣ 简单 CRUD
-
MySQL 更快
-
配置简单
-
资源消耗低
2️⃣ 复杂查询 / JOIN / 子查询
-
PostgreSQL 更快
-
优化器更智能
3️⃣ 高并发写入
-
MySQL:需要精细索引设计
-
PG:写多版本,稳定但需要维护
👉 性能不是绝对,看业务模型
六、扩展能力(PG 非常强)
PostgreSQL
-
支持 自定义函数(C、Python、JavaScript)
-
插件生态:
-
PostGIS(地理信息)
-
TimescaleDB(时序)
-
Citus(分布式)
-
-
可扩展性极强
MySQL
-
插件较少
-
主要靠中间件(分库分表)
七、主从复制 & 高可用
| 能力 | MySQL | PostgreSQL |
|---|---|---|
| 主从复制 | 成熟 | 成熟 |
| 读写分离 | 非常成熟 | 成熟 |
| 分库分表 | 中间件成熟 | 原生弱 |
| 云支持 | 极好 | 很好 |
👉 互联网公司 MySQL 生态优势明显
八、典型使用场景(非常重要)
✅ 选 MySQL 的场景
-
电商、用户系统
-
高并发 CRUD
-
微服务后台
-
互联网业务
✅ 选 PostgreSQL 的场景
-
BI / 报表 / 数据分析
-
金融、账务、风控
-
复杂查询
-
JSON / 地理 / 时序数据
-
强一致性要求
九、面试高频总结版(背这个就行)
MySQL 更偏工程化、高并发、简单模型
PostgreSQL 更偏学术化、强一致性、复杂数据处理
面试官常追问的点:
-
PG 的 MVCC 和 MySQL 的区别
-
PG 为什么不需要间隙锁
-
PG 的 JSONB 索引
-
为什么金融系统更偏 PG