GaussDB JDBC导入和gsql导入在insert,replace,duplicate方式性能差异

举报
GaussDB 数据库 发表于 2025/12/09 09:07:46 2025/12/09
【摘要】 问题现象在insert插入数据,发现jdbc方式比gsql方式性能差。通过jdbc和gsql两种方式,对比以下三种插入数据方式,发现性能确实存在差异。insert into XXX;replace into XXX;insert into XXX on duplicate XXX;案例验证1. gsql方式插入数据并查看耗时− 表结构gaussdb=> create table stu1 (...
  • 问题现象

insert插入数据,发现jdbc方式比gsql方式性能差。通过jdbcgsql两种方式,对比以下三种插入数据方式,发现性能确实存在差异。

insert into XXX

replace into XXX

insert into XXX on duplicate XXX;

  • 案例验证

1. gsql方式插入数据并查看耗时

 表结构

gaussdb=> create table stu1 (f1 varchar(100),
gaussdb(> f2 varchar(100),
gaussdb(> f3 varchar(100));
CREATE TABLE

 插入方式

insert into stu1 values (generate_series(1,200000),generate_series(1,200000), random() *100::decimal(5,2));
 
replace into stu2 values (generate_series(1,200000),generate_series(1,200000), random() *100::decimal(5,2));
 
insert into stu3 values (generate_series(1,200000), generate_series(1,200000), random() *100::decimal(5,2)) on duplicate key update f2 = generate_series(1,200000) + 1, f3=generate_series(1,200000)+1;

执行耗时

521.png

− 执行计划

insert into XXX

522.png

replace into XXX

523.png

insert into XXX on duplicate XXX

524.png

jdbc方式插入数据并查看耗时

insert 方式

525.png

replace方式

526.png

insert ...duplicate 方式

527.png

执行耗时

528.png

  执行计划

insert into XXX 执行计划

529.png

5291.png

  replace into XXX

5292.png

 insert into XXX on duplicate XXX

5293.png

  • 结果差异说明

gsql方式:三种方式语义一样,在数据库内部只解析一次,走硬解析,一条语句插入20万数据,所以耗时短。

jdbc方式:

a. insert into t_test (a,id,name) values(?,?,?) 走一次硬解析,20万次软解析,jdbc侧使用executeBatch接口调用,在数据库内部体现为执行了20万次insert,发送一次P报文,20万次UE报文,一个prepare语句多次调用,执行execute

b. replace into t_test(id,name,a) values (?,?,?) 使用executeBatch接口批量插入20万数据,向内核发送pue报文,在数据库内部体现为执行了20万次insert,语句走一次硬解析,后边调用uE报文执行20万次,与1相同。replace into语句是先删除后更新,返回影响的结果有两行。

5294.png

c.  insert into t_test (id,name,a) values (?,?,?) on duplicate key update a = (a + ?),使用executeBatch接口批量插入20万数据,在数据库内部体现为执行了20万次insertjdbc调用executeBatch接口向内核发送PUE报文,内部将此语句识别为upsert语句,此类语句不能走gplan计划复用,所以每次执行都会解析计划,耗时长.duplicate语句是原位更新,只影响一行。

5295.png

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。