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
相关产品推荐
相关产品推荐

