ABAP 性能优化

it2022-05-05  94

近来做的程序数据都有几十万,上百万条记录。性能问题是一个难题,如何优化?

前一段时间ACCENTURE 的老师讲了一天关于优化的问题受益不小。        从近来开发的程序来看优化主要有以下几个方面。1.数据库查询 2.数据处理。   1.数据库查询:       当查询的最终数据比较少,而表内的数据比较多的时候,应该想办法把最能缩小范围的条件 放在前面查询。这样在后面的查询记录会少很多      对尽更能用关键字查询,有时可能用一个关键字和几个关键字查询的快慢会不一样,有一个同 事在查询一个有一百多万的数据是。用了几个关键字反而非常慢。减少了关键字还会快一些。可以 用ST05 里面的"一个SQL要求的说明"这个功能去测试用什么条件会更好。 SELECT   T_00 . "TPLNR" , T_00 . "TPLMA" , T_02 . "ANLAGE" FROM   "IFLOT" T_00 INNER JOIN "EVBS" T_01 ON T_01 . "MANDT" = :A0 AND T_01 . "HAUS"   = T_00 . "TPLNR" INNER JOIN "EANL" T_02 ON T_02 . "MANDT" = :A1 AND T_02 . "VS   TELLE" = T_01 . "VSTELLE" WHERE   T_00 . "MANDT" = :A2 AND T_02 . "ANLAGE" IN ( :A3 , :A4 , :A5 , :A6 , :A7 )   可以试 A2 A3 A4。。。。看看那样更快 2.数据处理       LOOP 中不要用SELECT  和 NEXT LOOP  。      若必须NEXT LOOP  最好能把要LOOP  的内表数据减到最小。如 LOOP A1    LOOP A2 WHERE X1 = A1-X AND X2 <> ''.    ENDLOOP ENDLOOP.    这样可以把A2 的减小。如   DATA LI_A2 LIKE A2.       LI_A2 = A2. DELETE LI_Z2 WHERE X2 = ''.  这样就减小了一部分数据。     在SE30 里的小提示与技巧中用到一个办法。如下:但前提是两个LOOP的内表都要按同一个字段进行排序,下面用的是K 这个字段。 * Entries: 100 (ITAB1), 1000 (ITAB2) * Line width: 100 * Both tables sorted by key K I = 1. LOOP AT ITAB1 INTO WA1.   LOOP AT ITAB2 INTO WA2 FROM I.     IF WA2-K <> WA1-K.       I = SY-TABIX.       EXIT.     ENDIF.     " ...   ENDLOOP. ENDLOOP.   READ TABLE 当只查询一条记录用read table 不用要LOOP,而且用 BINARY SEARCH  。注意用 BINARY SEARCH 的时候一定要先按照 read table 后面的条件进行排序,不然得到就是错误的数据。  read table a1 with key x1 = 11 x2 = 33 BINARY SEARCH  . 在上面这一句话着一定要做排序 sort a1 by x1 x2.   常用性能优化工具如SE30 ST05 ST12 等也测试。找到问题点去修改。

转载于:https://www.cnblogs.com/vibratea/archive/2010/09/16/1827822.html

相关资源:ABAP程序性能优化

最新回复(0)