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