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方式性能差。通过jdbc和gsql两种方式,对比以下三种插入数据方式,发现性能确实存在差异。

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万次insert。jdbc调用executeBatch接口向内核发送PUE报文,内部将此语句识别为upsert语句,此类语句不能走gplan计划复用,所以每次执行都会解析计划,耗时长.duplicate语句是原位更新,只影响一行。

5295.png

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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