EsgynDB 2.5新特性之update using upsert

2022-07-05 00:00:00 执行 专区 订阅 方式 语法

在已经发布的EsgynDB 2.5版本中,对update的性能做了优化。
从语法上,我们增加了新的语法update using upsert,详细语法如下,

update using upsert <tablename> set <colname>=<colvalue> where ...

从语义上,update using upsert采用是vsbb upsert批量提交的方式,类似于执行upsert using load语句。
从事务支持上,由于底层是转换为upsert using load方式,因此不支持事务一致性,也就是说如果update using upsert语句执行一半报错,那么已经更新的数据不会回滚。
从性能上,update using upsert可以实现比update快10x以上的性能优势。
从执行计划上,我们也可以看出update using upsert和update的执行计划的不同。update using upsert采用vsbb_upsert批量更新的方式,而update则采用traf_update逐行更新的方式。

//1 update using upsert
>>explain options 'f' update using upsert DAAS_GX.DMA_ENTTYPE_STAT_P1 set END_NUM=100;

LC RC OP OPERATOR OPT DESCRIPTION CARD
---- ---- ---- -------------------- -------- -------------------- ---------

5 . 6 root x 5.03E+006
4 . 5 esp_exchange 1:6(range) 5.03E+006
2 3 4 tuple_flow 5.03E+006
. . 3 trafodion_vsbb_upser DMA_ENTTYPE_STAT_P1 1.00E+000
1 . 2 sort 5.03E+006
. . 1 trafodion_scan DMA_ENTTYPE_STAT_P1 5.03E+006

//2 update
>>explain options 'f' update DAAS_GX.DMA_ENTTYPE_STAT_P1 set END_NUM=100;

LC RC OP OPERATOR OPT DESCRIPTION CARD
---- ---- ---- -------------------- -------- -------------------- ---------

4 . 5 root x 5.03E+006
3 . 4 esp_exchange 1:6(range) 5.03E+006
1 2 3 tuple_flow 5.03E+006
. . 2 trafodion_update DMA_ENTTYPE_STAT_P1 1.00E+000
. . 1 trafodion_scan DMA_ENTTYPE_STAT_P1 5.03E+006

从限制条件上,新版本中的update using upsert还不支持表上有索引的情况,如果表上有索引,那么它会自动转换为update,执行计划走trafodion_update。当然,后续版本会改进这一限制,也包括不支持事务的问题。





————————————————
版权声明:本文为CSDN博主「post_yuan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/post_yuan/article/details/86648729

相关文章