pg 查询性能比mysql高_PostgreSQL 数据库内外查询速度比较

通过Rust存储过程和Go语言连接查询对比,发现PostgreSQL在执行简单SQL查询如SELECT 1时表现出更快的速度。使用pg_catalog查询表字段的性能显著提升,Rust执行10000次耗时1秒,Go耗时3秒。
摘要由CSDN通过智能技术生成

数据库内使用 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 秒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值