PostgreSQL 数据库内外查询速度比较

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介:

数据库内使用 Rust 编写存储过程,使用 pgxr 程序库;

数据库外使用 Go 语言,使用 pgx 连接数据库进行查询;

逻辑都是查询某个表的字段列表,循环执行10000次;

测试结果如下:

Rust 存储过程:

test_sql_speed: 26.810285862s

Go 连接数据库查询:

32.746561715s

Go 语言只建立一次连接。

看来复用连接的话开销很小的嘛,一次只需要花费 0.5 毫秒左右。

然后,又测试了最简单的 SQL 查询:SELECT 1,同样也是 10000 次;

这次,Rust 存储过程:

test_sql_speed: 67.651917ms

Go 连接数据库查询:

1.261617769s

数据库内查询那是相当快的,这样算来每次处理连接的耗时大概在 0.1 毫秒左右。

源代码如下:

Rust

#[no_mangle]
pub extern "C" fn test_sql_speed(_fcinfo: FunctionCallInfo) -> Datum
{
    let sys_time = SystemTime::now();
    for _ in 1..10000 {
        let _i = query_for_int("select 1");
    }
    let difference = SystemTime::now().duration_since(sys_time)
                         .expect("SystemTime::duration_since failed");
    eprintln!("test_sql_speed: {:?}", difference);
    PG_RETURN_I32(1)
}

Go

func main() {
    db := openDbConnection()
    start := time.Now()
    i := 0
    for i = 1; i <= 10000; i++ {
        db.Query(`SELECT 1`)
    }
    t := time.Now()
    elapsed := t.Sub(start)
    fmt.Printf("%v\n", elapsed)
}

后来发现用于查询表字段的方法效率不行,是从 information_schema 这个 ANSI 标准目录里去查的,后来看了一些资料,改成从 pg_catalog 这个原生目录去查,结果性能有了大幅提升。

Rust 里查询一万次只用了 1 秒,Go 里查询一万次用了 3 秒。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
2月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据库
PostgreSQL的逻辑存储结构涵盖数据库集群、数据库、表、索引、视图等对象,每个对象有唯一的oid标识。数据库集群包含多个数据库,每个数据库又包含多个模式,模式内含表、函数等。通过特定SQL命令可查看和管理这些数据库对象。
|
3天前
|
存储 关系型数据库 分布式数据库
PolarDB PostgreSQL版:商业数据库替换与企业上云首选
PolarDB PostgreSQL版是商业数据库替换与企业上云的首选。其技术架构实现存储计算分离,具备极致弹性和扩展性,支持Serverless、HTAP等特性。产品在弹性、性能、成本优化和多模处理方面有显著提升,如冷热数据自动分层、Ganos多模引擎等。已在汽车、交通、零售等行业成功应用,典型案例包括小鹏汽车、中远海科等,帮助企业大幅降低运维成本并提高业务效率。
26 13
|
1天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
29 6
|
1天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
11 0
|
1月前
|
存储 缓存 网络协议
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
33 6
|
2月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据库集群
PostgreSQL的逻辑存储结构涵盖了数据库集群、数据库、表、索引、视图等对象,每个对象都有唯一的oid标识。数据库集群是由单个PostgreSQL实例管理的所有数据库集合,共享同一配置和资源。集群的数据存储在一个称为数据目录的单一目录中,可通过-D选项或PGDATA环境变量指定。
|
2月前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
87 15
|
1月前
|
SQL JavaScript 程序员
数据库LIKE查询屡试不爽?揭秘大多数人都忽视的秘密操作符!
本文分析了因数据库中的不可见空白字符导致的数据查询问题,探讨了问题的成因与特性,并提出了使用 SQL 语句修复问题的有效方案。同时,总结了避免类似问题的经验和注意事项。
38 0
|
2月前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
46 2
|
2月前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例