You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HANA数据库中Delete+Insert与Modify/Update的性能对比分析

HANA数据库中Delete+Insert vs Update/Modify的性能对比测试

测试背景

我在某类中发现一段修改数据库行的代码,没有使用Update或Modify语句,而是采用Delete+Insert的组合方式。询问原开发者得知,这种方式在SYBASE上性能更优,但不确定在HANA上的表现,因此自行开展了性能测试。

测试环境

数据库表定义

测试使用的透明表定义如下:

@EndUserText.label : 'Datenbanktest'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #ALLOWED
define table zdb_test {
  key mandt : mandt not null;
  key col1  : char20 not null;
  key col2  : char20 not null;
  key col3  : char20 not null;
  col4      : char20 not null;
}

测试类代码

用于测试的ABAP类实现如下:

CLASS zcl_db_test DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS zcl_db_test IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    DATA tab TYPE STANDARD TABLE OF zdb_test.

    tab = VALUE #(
                ( mandt = sy-mandt col1 = '1' col2 = '2'  col3 = '3'  col4 = '4' )
                ( mandt = sy-mandt col1 = '5' col2 = '6'  col3 = '7'  col4 = '8' )
                ( mandt = sy-mandt col1 = '9' col2 = '10' col3 = '11' col4 = '12' )
    ).

    "Variant 1: Delete + Insert
    GET RUN TIME FIELD FINAL(t1).
    DELETE zdb_test FROM TABLE tab.
    INSERT zdb_test FROM TABLE tab.
    GET RUN TIME FIELD FINAL(t2).

    "Variant 2: Modify
    GET RUN TIME FIELD FINAL(t3).
    MODIFY zdb_test FROM TABLE tab.
    GET RUN TIME FIELD FINAL(t4).

    "Variant 3: Update
    GET RUN TIME FIELD FINAL(t5).
    UPDATE zdb_test FROM TABLE tab.
    GET RUN TIME FIELD FINAL(t6).

    out->write( |Delete + Insert: { t2 - t1 NUMBER = ENVIRONMENT }µs| ).
    out->write( |Modify: { t4 - t3 NUMBER = ENVIRONMENT }µs| ).
    out->write( |Update: { t6 - t5 NUMBER = ENVIRONMENT }µs| ).
  ENDMETHOD.
ENDCLASS.

小数据量测试结果

针对3条数据的4次测试结果如下:

Delete + Insert: 1.693µs
Modify: 753µs
Update: 1.122µs

Delete + Insert: 1.630µs
Modify: 878µs
Update: 739µs

Delete + Insert: 1.979µs
Modify: 813µs
Update: 770µs

Delete + Insert: 1.867µs
Modify: 781µs
Update: 1.097µs

疑问点

基于小数据量测试结果,我产生了以下疑问:

  • 本次测试是否存在缺陷?
  • 数据量较大时测试结果是否会变化?
  • 是否SYBASE上Delete+Insert性能更优,但HANA上Update/Modify更快?
  • Update与Modify之间是否存在性能差异?

大数据量补充测试结果

为验证数据量的影响,使用100万条数据进行了4次补充测试,结果如下:

Delete + Insert: 5.785.950µs
Modify: 5.335.416µs
Update: 4.350.517µs

Delete + Insert: 10.169.629µs
Modify: 5.158.889µs
Update: 4.414.202µs

Delete + Insert: 10.066.633µs
Modify: 5.243.362µs
Update: 4.583.713µs

Delete + Insert: 10.232.670µs
Modify: 5.079.865µs
Update: 4.689.990µs

测试结论

从两次测试的结果来看,在本次测试的场景中,Update始终是性能最优的方式,Modify次之,Delete+Insert的性能最差,且数据量越大,这种差异越明显。

内容的提问来源于stack exchange,提问作者Schesam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:49:58