一、一句话核心区别(先给结论)
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(可索引)ARRAYHSTOREUUIDENUMRANGEGEOMETRY(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