赛跑网

 找回密码
 注册

QQ登录

只需一步,快速开始

快捷登录

查看: 3410|回复: 21

赛跑网-ERP效能优化之内表

[复制链接]
发表于 2013-3-31 17:46:42 | 显示全部楼层 |阅读模式
内表有三种分类:标准、哈希、排序。
哈希内表和排序内表必须指定键值(键值不能重复)。三种内表在读取的时候时间是有差异的,用如下代码进行验证:有兴趣的可以在自己系统中执行如下代码,
PS:客户号 = 系统存在的客户号。
语句1
TYPES:BEGIN OF ty_kna1 ,
      kunnr TYPE   kunnr,
      land1 TYPE  land1_gp,
      name1  TYPE name1_gp,
     END OF ty_kna1.
DATA gs_kna1 TYPE ty_kna1.
DATA gt_kna1 TYPE STANDARD TABLE OF ty_kna1.

SELECT kunnr  land1   name1  FROM kna1 CLIENT SPECIFIED
    INTO  TABLE gt_kna1
    WHERE mandt = '400'.
SORT gt_kna1 BY KUNNR.

DO 1000000 TIMES.
  READ TABLE gt_kna1 INTO gs_kna1 WITH KEY KUNNR = '客户号'
                                           BINARY SEARCH.
ENDDO.

语句2
TYPES:BEGIN OF ty_kna1 ,
      kunnr TYPE   kunnr,
      land1 TYPE  land1_gp,
      name1  TYPE name1_gp,
     END OF ty_kna1.
DATA gs_kna1 TYPE ty_kna1.
DATA gt_kna1 TYPE HASHED  TABLE OF ty_kna1
      WITH UNIQUE KEY kunnr .

SELECT kunnr land1 name1 FROM kna1  CLIENT SPECIFIED
    INTO TABLE gt_kna1
    WHERE mandt = '400'.

DO 1000000 TIMES.
  READ TABLE gt_kna1 INTO gs_kna1  WITH TABLE  KEY KUNNR = '客户号'.
ENDDO.
语句3
TYPES:BEGIN OF ty_kna1 ,
      kunnr TYPE   kunnr,
      land1 TYPE  land1_gp,
      name1  TYPE name1_gp,
     END OF ty_kna1.
DATA gs_kna1 TYPE ty_kna1.
DATA gt_kna1 TYPE SORTED  TABLE OF ty_kna1 WITH UNIQUE key kunnr .

SELECT kunnr  land1 name1 FROM kna1  CLIENT SPECIFIED
    INTO  TABLE gt_kna1
    WHERE mandt = '400'.

DO 1000000 TIMES.
  READ TABLE gt_kna1 INTO gs_kna1 WITH TABLE  KEY KUNNR = '客户号'.
ENDDO.
以上语句中可以验证标准内表和哈希内表,在内表数据量很大或者需要多次读取时哈希内表占绝对优势。在三种类型的内表中,哈希内表的读取最快,标准内表的二分查找次之,排序内表最慢。
        哈希内表不能通过APPEND 去添加记录。一般通过OPEN SQL取得数据存入哈希内表。哈希内表的键值设定很重要,若设置不当出现重复记录的话,整个SQL语句会DUMP。提示如下错误:A row with the same key already exists.
        鉴于上面情况,若内表数据量大(2w以上),需要使用哈希内表提高在应用服务器上的执行时间时,一定要注意哈希主键的设定。
**********************************************
如果在LOOP循环中更新内表数据,通常有如下两种做法
语句1
TYPES:BEGIN OF ty_kna1 ,
      kunnr TYPE   kunnr,
      land1 TYPE  land1_gp,
      name1  TYPE name1_gp,
     END OF ty_kna1.
DATA gs_kna1 TYPE ty_kna1.
DATA gt_kna1 TYPE STANDARD   TABLE OF ty_kna1 .

SELECT kunnr land1 name  FROM kna1 CLIENT SPECIFIED
    INTO  TABLE gt_kna1
    WHERE mandt = '400'.

FIELD-SYMBOLS <fs> TYPE ty_kna1.

DO 10 TIMES.
  LOOP AT gt_kna1 ASSIGNING <fs>.
    <fs>-land1 = 'CN'.
  ENDLOOP.
ENDDO.语句2
TYPES:BEGIN OF ty_kna1 ,
      kunnr TYPE   kunnr,
      land1 TYPE  land1_gp,
      name1  TYPE name1_gp,
     END OF ty_kna1.
DATA gs_kna1 TYPE ty_kna1.
DATA gt_kna1 TYPE STANDARD   TABLE OF ty_kna1 .

SELECT kunnr  land1  name1 FROM  kna1 CLIENT SPECIFIED
    INTO  TABLE gt_kna1
    WHERE mandt = '400'.

DO 10 TIMES.
  LOOP AT gt_kna1 INTO gs_kna1.
    gs_kna1-land1 = 'CN'.
    MODIFY gt_kna1 FROM gs_kna1.
  ENDLOOP.
ENDDO.
很明显,使用指针处理内表的执行效能更高,这种优势在内表数据很大时,非常明显。原理就不在说了,大家都知道!


最近访客

  • tbb1177
    2024-01-16
  • 单单
    2023-01-06
  • austin
    2022-03-24
  • NBCAO
    2020-11-12




上一篇:利用BADI出口ME_PROCESS_PO_CUST修改HEADER
下一篇:赛跑网-ERP效能优化之SQL(一)
本楼点评(0) 收起
发表于 2013-3-31 21:54:44 | 显示全部楼层
学习了
本楼点评(0) 收起
发表于 2013-3-31 21:56:44 | 显示全部楼层
来说学习啦
本楼点评(0) 收起
发表于 2013-3-31 23:00:03 | 显示全部楼层
通过SE30进行测试发现,标准内表效能最低,哈希内表跟排序内表都不耗DB的或者说消耗很少,响应时间快!
本楼点评(0) 收起
发表于 2013-4-1 00:14:04 | 显示全部楼层
Study
本楼点评(0) 收起
 楼主| 发表于 2013-4-1 19:27:14 | 显示全部楼层
ronnieshuai 发表于 2013-3-31 23:00
通过SE30进行测试发现,标准内表效能最低,哈希内表跟排序内表都不耗DB的或者说消耗很少,响应时间快!

实践出真知
本楼点评(0) 收起
发表于 2013-4-11 09:28:12 | 显示全部楼层
顶!有营养!
本楼点评(0) 收起
发表于 2013-4-13 09:49:53 | 显示全部楼层
xuexi
本楼点评(0) 收起
发表于 2013-4-28 01:37:58 | 显示全部楼层

thanks

cx楼主辛苦啦,这个问题对我很重要
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|联系我们|赛跑网 ( QQ:108519493QQfsq

GMT+8, 2024-4-25 00:21 , Processed in 0.266199 second(s), 60 queries .

Powered by 91SAP X3.4

© 2001-2023 91sap Team.

快速回复 返回顶部 返回列表