PostgreSQL和MySQL的性能对比实验

该实验通过对比PostgreSQL和MySQL在不同类型的读负载、短事务中的性能,包括主键随机读、主键范围读、非主键随机读、单行更新操作,发现PostgreSQL在读写性能上整体优于MySQL,尤其是在delete和update操作上表现出色,但性能稳定性稍逊。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试数据库schema:

drop table if exists t1;

drop table if exists t2;

drop table if exists t3;

create table t1(id int primary key, value1 int, value2 varchar(200));

create index s1 on t1(value1);

create table t2(id int primary key, value1 int, value2 varchar(200));

create index s2 on t2(value1);

create table t3(id int primary key, value1 int, value2 varchar(200));

create index s3 on t3(value1);

 

t1:1000万行;t2:1亿行;t3:3亿行。

id是连续的;value1为0 - 1000000000之间的随机值;value2为平均长度为100,最大长度为200的字符串。

 

PG和MySQL的配置请看:

http://blog.csdn.net/liyuming0000/article/details/51023511

http://blog.csdn.net/liyuming0000/article/details/51014191

 

 

测试负载:

1.      单表上的不同类型读负载

单点(主键)随机读负载

主键范围读负载

非主键的读(二级索引读)负载

 

2.      短事务

单行更新操作(insert、delete、replace、update)

 

QPS:每秒查询数

QRS:查询响应时间(单位为ms)

TPS:每秒事务数

TRS:事务响应时间(单位为ms)

统计表中第二栏的响应时间与第一栏的每秒操作数按顺序一一对应

 

实验一

实验目的:测试MySQL和PG针对主键随机读负载的最优吞吐量。

测试负载:select value1 from table where id = ?,以预编译的形式执行,id是在主键范围上均匀分布。

MySQL:

数据表t1:

线程数

QPS

QRS

10

35522, 36419

0.285, 0.279

20

64540, 64716

0.314, 0.313

50

107399, 105946

0.473, 0.480

100

109425, 110050

0.922, 0.917

150

109569, 111209

1.381, 1.361

200

115449, 115601

1.747, 1.744

250

116336, 116004

2.167, 2.173

300

115520, 115265

2.626, 2.629

 

数据表t2:

线程数

QPS

QRS

10

2679, 35821

3.735, 0.282

20

22583, 63940

0.889, 0.316

50

81851, 107456

0.619, 0.474

100

94480, 109425

1.068, 0.921

150

108686, 109180

1.390, 1.387

200

116322, 115101

1.733, 1.751

250

116211, 114987

2.168, 2.190

300

115134, 114702

2.630, 2.643

 

数据表t3:

线程数

QPS

QRS

10

1110, 30518

8.989, 0.331

20

3717, 52904

5.369, 0.384

50

18882, 75080

2.655, 0.675

100

42844, 87145

2.342, 1.156

150

98669, 91366

1.530, 1.654

200

61733, 88915

3.247, 2.259

250

67503, 85314

3.712, 2.942

300

88601, 84400

3.407, 3.570

 

PG:

数据表t1:

线程数

QPS

QRS

10

37879, 38148, 12728, 38237

0.275, 0.266, 0.790, 0.265

20

75037, 68906, 78759, 77142

0.273, 0.294, 0.261, 0.265

50

139676, 135779, 137780, 135497

0.366, 0.375, 0.371, 0.377

100

181549, 185476, 175890, 173170

0.560, 0.548, 0.580, 0.588

150

222857, 219711, 230571, 204284

0.695, 0.698, 0.670, 0.751

200

245709, 231214, 245812, 240065

0.834, 0.878, 0.836, 0.851

250

246533, 228139, 248405, 238104

1.044, 1.115, 1.041, 1.075

300

246229, 237196, 239975, 226885

1.259, 1.302, 1.294, 1.357

 

数据表t2:

线程数

QPS

QRS

10

30784, 37991, 917, 35821

0.329, 0.274, 10.867, 0.282

20

54830, 70700, 7591, 72989

0.370, 0.287, 2.636, 0.280

50

122400, 136795, 91058, 137434

0.417, 0.374, 0.558, 0.372

100

131690, 180934, 132992, 179460

0.768, 0.563, 0.780, 0.567

150

152968, 206199, 196900, 217128

0.993, 0.743, 0.776, 0.706

200

182414, 221721, 221870, 221576

1.112, 0.924, 0.921, 0.921

250

212466, 225449, 221794, 215628

1.210, 1.142, 1.154, 1.184

300

168306, 212136, 211857, 206145

1.813, 1.455, 1.456, 1.491

 

数据表t3:

线程数

QPS

QRS

10

330, 1958, 961, 5021

29.612, 5.097, 10.348, 1.993

20

1728, 4049, 4533, 31004

11.522, 4.935, 4.406, 0.649

50

3158, 6568, 7593, 83657

15.717, 7.596, 6.574, 0.606

100

3520, 25436, 9688, 108118

27.875, 3.933, 10.279, 0.934

150

3600, 23254, 10862, 121425

40.687, 6.445, 13.718, 1.247

200

3497, 70062, 14395, 124518

55.519, 2.862, 13.801, 1.618

250

3500, 121358, 10639, 27538

69.554, 2.096, 23.299, 9.050

300

3321, 19276, 6610, 99964

84.137, 15.477, 44.068, 3.024

 

 

实验二

实验目的:测试MySQL和PG针对主键范围读负载的最优吞吐量。

测试负载:select value1 from table where id between ? and ?,以预编译的形式执行,第一个id在主键范围上均匀分布,range大小为0- 100的一个随机值。

MySQL:

数据表t1:

线程数

QPS

QRS

10

22452, 25006

0.449, 0.403

20

43140, 43006

0.468, 0.472

50

70608, 70080

### PostgreSQL MySQL 的特性对比 #### 数据一致性与事务支持 PostgreSQL 提供了更强大的事务支持数据一致性保障,尤其是在 ACID 属性的支持上更为严格[^2]。它能够很好地处理复杂的查询多表联结操作,适合需要高可靠性的应用场景。 相比之下,MySQL 虽然也支持事务,但在默认配置下(如 MyISAM 存储引擎),并不完全遵循 ACID 原则。对于那些对性能有极高要求而可以适当放宽一致性的场景,MySQL 是不错的选择[^3]。 #### 查询能力与复杂度支持 PostgreSQL 支持更多的高级 SQL 功能,例如窗口函数、通用表达式 (CTE)、JSONB 类型以及全文检索等功能[^1]。这些使得 PostgreSQL 成为了开发人员构建高度定制化应用程序的理想选择。 然而,在简单的 CRUD 操作或者大规模读取优化的情况下,MySQL 表现出更高的效率,并且通过其 InnoDB 引擎提供了良好的索引机制来加速查询过程[^4]。 #### 性能表现 就写入性能而言,MySQL 显著优于 PostgreSQL,尤其当面对大量的并发写请求时更是如此。这使其成为电子商务网站或其他需要快速更新记录环境下的首选方案之一。 另一方面,尽管 PostgreSQL 在这方面稍显劣势,但它凭借卓越的数据验证能力错误恢复策略弥补了这一不足之处,从而确保即使是在极端条件下也能维持较高的服务可用性水平。 #### 社区生态与发展速度 两者都拥有活跃的开发者社区技术文档资源可供参考学习。不过值得注意的是,由于历史原因,MySQL 更早进入市场并积累了广泛的用户基础,因此可能会更容易找到现成插件或第三方工具集成解决方案。 但是近年来随着云计算趋势的发展,越来越多的企业开始倾向于采用具备更高灵活性特性的 PostgreSQL 来满足现代化业务需求的变化节奏。 --- ### 适用场景分析 | **因素** | **PostgreSQL 推荐场合** | **MySQL 推荐场合** | |-------------------|------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------| | 数据完整性 | 需要强健的数据保护措施防止意外丢失修改等情况发生 | 对于某些特定领域比如日志存储等允许一定程度上的不精确性 | | 复杂查询 | 经常涉及多层嵌套子句计算统计报表生成等工作 | 主要是基本增删改查动作频繁执行 | | 扩展性 | 当前架构预计未来会经历显著增长并且希望保留最大自由度去调整内部结构 | 已经明确了长期稳定运行模式无需过多变动 | | 开发者友好程度 | 寻求更多创新实验空间探索新兴技术方向 | 追求成熟可靠的生态系统便于迅速部署 | --- ### 主要区别总结 - **核心理念不同**: PostgreSQL 致力打造全能型选手覆盖广泛的技术范畴; 而 MySQL 则专注于提供极致的速度体验. - **功能实现差异**: 如前所述前者擅长应对挑战性强的任务后者则胜在简洁明快的操作流程设计之上.[^2] - **目标受众划分清晰**: 根据各自优势分别吸引着追求技术创新或是注重实际效益两类人群的关注目光. ```sql -- 示例代码展示两者的SQL语法兼容性测试 SELECT version(); -- 查看当前使用的数据库版本号命令相同适用于两种系统之间切换时作为初步判断依据之一。 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值