Ubuntu 上 PostgreSQL 与 MySQL 对比与选型
一 概览与适用场景
- PostgreSQL:强调对 SQL 标准与复杂查询的支持,具备更丰富的数据类型(如 JSON/JSONB、数组、自定义类型)、强大的全文检索与**GIS(PostGIS)**能力,适合复杂事务、分析型查询与地理空间场景。
- MySQL:以易用性与高吞吐读见长,生态成熟、部署与运维简单,适合读多写少、快速上线的 Web 应用与通用业务。
- 在 Ubuntu 上两者均可通过官方仓库或 APT 便捷安装,版本选择面广,社区资料丰富。
二 安装与运维差异
- PostgreSQL(Ubuntu 17.6 示例)
- 添加官方仓库并安装:导入 GPG Key,写入源列表,执行
sudo apt install postgresql-17;启动并设置开机自启:sudo systemctl enable --now postgresql;登录:sudo -u postgres psql;远程访问需修改 postgresql.conf 的 listen_addresses 与 pg_hba.conf 的认证规则并重启。
- MySQL(Ubuntu 常见做法)
- 通过 APT 安装:
sudo apt install mysql-server;启动与开机自启:sudo systemctl enable --now mysql;安全初始化与登录:sudo mysql_secure_installation 或 mysql -u root -p;远程访问需调整 bind-address 与防火墙(如放开 3306/tcp)。
- 小结:两者在 Ubuntu 上的安装、启停、远程访问思路一致,均依托 systemd 与 APT 生态,差异主要在配置文件与认证细节。
三 性能与并发对比
- 在一项基于 Ubuntu 20.04 LTS、8 核/32GB/SSD 的 Sysbench OLTP 测试中(数据量约每表 100 万行、连接数 200、预热后运行 15 分钟),结果如下:
- MySQL 8.0.23:TPS 500、95% 延迟 15ms、最大延迟 30ms、IOPS 约 2500
- PostgreSQL 13.2:TPS 450、95% 延迟 20ms、最大延迟 35ms、IOPS 约 2000
- 解读:在“典型 OLTP 混合读写、读多写少”的场景下,MySQL 吞吐与延迟略优;而 PostgreSQL 在复杂查询、复杂事务与扩展性方面更具优势,适合对查询表达力与数据一致性要求更高的场景。
四 功能与生态对比
| 维度 |
PostgreSQL |
MySQL |
| SQL 与类型系统 |
更贴近标准,类型丰富(如 JSON/JSONB、数组、自定义类型) |
类型体系成熟,JSON 支持逐步完善 |
| 索引与高级查询 |
支持**函数索引、全文检索、GIS(PostGIS)**等高级能力 |
索引机制成熟,全文检索可用但生态更多依赖外部方案 |
| 存储引擎 |
以 Heap 表 + MVCC 为核心,一体化设计 |
InnoDB 为主,亦支持多引擎(如 MyISAM 等) |
| 复制与高可用 |
主备复制形态多样,常见为基于 WAL 的物理复制 |
基于 binlog 的复制(逻辑复制/组复制等) |
| GIS 能力 |
原生 PostGIS,地理空间生态完善 |
支持 GIS,但整体生态与深度通常不及 PostGIS |
| 典型场景 |
复杂查询、严格一致性、地理空间、分析型负载 |
高并发读、Web CRUD、快速交付与运维简化 |
五 选型建议
- 优先选择 PostgreSQL:需要更强的SQL 表达力与复杂查询/分析;依赖 JSONB 的灵活查询与索引;需要GIS/空间分析;对事务一致性与扩展性要求高。
- 优先选择 MySQL:以读多写少的 Web/业务系统为主;追求快速上手与运维简便;需要与常见 Web 框架和中间件生态快速集成。
- 无论选择哪一款,务必基于你的真实工作负载进行基准测试(如 Sysbench),并结合硬件、参数调优、数据模型与访问模式综合评估。