EsgynDB 2.5新特性之update using upsert
在已经发布的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
相关文章