Documente Academic
Documente Profesional
Documente Cultură
EN LA
PROGRAMACIN
ABAP/4
Versin 1.0
Diciembre 1998
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
TABLA DE CONTENIDOS
1.
2.
INTRODUCCIN...................................................................................................................................5
3.
INTERFAZ SQL......................................................................................................................................6
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
4.
MANIPULACIN DE STRINGS........................................................................................................11
4.1
4.2
4.3
4.4
4.5
4.6
5.
TABLAS INTERNAS............................................................................................................................15
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
5.16
6.
TIPOS DE DATOS................................................................................................................................25
6.1
6.2
6.3
6.4
6.5
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
7.
CONVERSIN DE CAMPOS.............................................................................................................28
7.1
7.2
7.3
7.4
7.5
8.
9.
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
Versin
#
Autor
Descripcin
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
2. Introduccin
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
3. Interfaz SQL
3.1 Select ... Where vs. Select + Check
Select + Check
SELECT * FROM VERI_CLNT
CHECK: VERI_CLNT-ARG1 = 7.
ENDSELECT.
88,234 microsegundos
Si necesita una sola fila de una tabla de base de datos o vista, use la
instruccin SELECT SINGLE en vez de un loop SELECT-ENDSELECT.
SELECT SINGLE requiere una comunicacin (I/O) con el sistema de la base
de datos, mientras que SELECT-ENDSELECT necesita dos.
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
308,670 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
UPDATE VERI_CLNT
SET FUNCTINT = FUNCTINT + 1.
70,487 microsegundos
3,749,142 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
REFRESH X006.
SELECT * FROM T006 INTO TABLE
X006.
APPEND X006.
ENDSELECT.
2,246 microsegundos
829 microsegundos
240,062 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
4. Manipulacin de strings
4.1 Operadores especiales en IF (CA,...)
Do-Loop con Field-Symbols
Usando el operador CA
IF CHA(200) CA ().
Alguna operacin.
ENDIF.
443 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
CALL FUNCTION
STRING_CONCATENATE_3
EXPORTING
STRING1 = T100-ARBGB
STRING2 = T100-MSGNR
STRING3 = T100-TEXT
IMPORTING
STRING = CLA
EXCEPTIONS
TOO_SMALL = 01.
194 microsegundos
CONCATENATE T100-ARBGB
T100-MSGNR
T100-TEXT INTO
CLA.
14 microsegundos
CONCATENATE
SPLIT
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
STRING_LENGTH
STRING_CENTERED
STRING_MOVE_RIGHT
STRLEN()
11 microsegundos
I1 = STRLEN(CLA).
DO I1 TIME VARYING STR FROM CLA
NEXT
CLA+1.
CHECK STR NE SPACE.
ADD STR-LINE TO CHECK_SUM
ENDDO.
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
597 microsegundos
171 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
5. Tablas internas
5.1 Generando tablas ordenadas
Generacin en un paso usando
read/insert
TAB_DES contiene 1000 entradas
REFRESH TAB_DEST.
LOOP AT TAB_SRC.
READ TABLE TAB_DEST WITH KEY
K = TAB_SRC-K BINARY SEARCH.
INSERT TAB_SRC INTO TAB_DEST
INDEX
SY-TABIX.
ENDLOOP.
98,545 microsegundos
REFRESH TAB_DEST.
LOOP AT TAB_SRC.
READ TABLE TAB_DEST WITH KEY
K = TAB_SRC-K BINARY SEARCH.
IF SY-SUBRC <> 0.
INSERT TAB_SRC INTO TAB_DEST
INDEX
SY-TABIX.
ENDIF.
REFRESH TAB_DEST.
LOOP AT TAB_SRC.
APPEND TAB_SRC TO TAB_DEST.
ENDLOOP.
SORT TAB_DEST BY K.
DELETE ADJACENT DUPLICATES FROM
TAB_DEST COMPARING K.
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
ENDLOOP.
43,469 microsegundos
26,259 microsegundos
37 microsegundos
15 microsegundos
LOOP AT TAB.
CHECK TAB-K = KVAL.
" ...
ENDLOOP.
1,395 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
REFRESH TAB_DEST.
LOOP AT TAB_SRC INTO TAB_DEST.
APPEND TAB_DEST.
ENDLOOP.
949 microsegundos
314 microsegundos
Las tablas internas pueden ser copiadas por asignacin igual que cualquier
otro tipo de objetos de datos. Si la tabla interna itab tiene una lnea de
cabecera, la tabla puede accederse por itab[ ]
SORT TAB.
2,026 microsegundos
821 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
LOOP AT TAB1.
LOOP AT TAB2 WHERE K = TAB1K.
" ...
ENDLOOP.
ENDLOOP.
I2 = 1.
LOOP AT TAB1.
LOOP AT TAB2 FROM I2.
IF TAB2-K <> TAB1-K.
I2 = SY-TABIX.
EXIT.
ENDIF.
" ...
ENDLOOP.
ENDLOOP.
394,175 microsegundos
10,029 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
DO 101 TIMES.
DELETE TAB_DEST INDEX 450.
ENDDO.
3,119 microsegundos
128 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
Juntando va COLLECT
LOOP AT TAB_SRC.
READ TABLE TAB_DEST WITH KEY
K = TAB_SRC-K BINARY
SEARCH.
IF SY-SUBRC = 0.
ADD: TAB_SRC-VAL1 TO
TAB_DEST-VAL1,
TAB_SRC-VAL2 TO
TAB_DEST-VAL2
MODIFY TAB_DEST INDEX SYTABIX.
ELSE.
INSERT TAB_SRC INTO
TAB_DEST
INDEX SY-TABIX.
ENDIF.
ENDLOOP.
LOOP AT TAB_SRC.
COLLECT TAB_SRC INTO
TAB_DEST.
ENDLOOP.
SORT TAB_DEST BY K.
1,580,904 microsegundos
284,471 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
Bsqueda Binaria
1,452 microsegundos
29 microsegundos
5.11ndices secundarios
Sin ndice secundario bsqueda
lineal
Tabla TAB contiene 1000 entradas.
El READ usa las 500 primeras
entradas.
798 microsegundos
32 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
Con un ndice secundario, puede remplazar una bsqueda lineal con una
bsqueda binaria ms un acceso indexado .
TAB = TAB_WA.
APPEND TAB.
17 microsegundos
9 microsegundos
IF TAB1[] = TAB2[].
" ...
ENDIF.
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
IF TAB_DIFFERENT = SPACE.
" ...
ENDIF.
1,774 microsegundos
535 microsegundos
Una tabla interna puede ser comparada en una expresin lgica igual que
otros objetos.
Dos tablas internas son iguales si tienen el mismo numero de lneas y cada
par de correspondiente lnea es igual.
Si una tabla interna itab tiene la lnea de cabecera, la tabla en si misma es
accedida por itab[].
Cursor paralelo
LOOP AT TAB1.
READ TABLE TAB2 WITH KEY
K = TAB1-K BINARY SEARCH.
IF SY-SUBRC = 0.
...
ENDIF.
ENDLOOP.
28,319 microsegundos
I2 = 1.
LOOP AT TAB1.
READ TABLE TAB2 INDEX I2.
IF SY-SUBRC <> 0. EXIT. ENDIF.
IF TAB2-K = TAB1-K.
" ...
ADD 1 TO I2.
ENDIF.
ENDLOOP.
9,824 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
5.15Borrando duplicados
Rudimentaria forma de borrar
duplicados
26,826 microsegundos
4,159 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
ENDLOOP.
14,491 microsegundos
6,496 microsegundos
Con la nueva variante del delete, DELETE itab [FROM ] [TO ] WHERE
, la tarea de borrar un conjunto de lneas puede ser transferido al kernel. Si
es posible, WHERE debera ser usado junto con FROM and/or TO para
mejorar la performance an ms.
La performance obtenida cuando se usa DELETE itab FROM, en vez de f
LOOP AT itab WHERE DELETE itab. ENDLOOP.mejora con el nmero de
entradas de la tabla interna y el nmero de lneas a ser borradas.
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
6. Tipos de datos
6.1 Tipos de datos declarados vs. parmetros
sin declaracin de tipo.
Parmetros sin definicin de tipo
REPEAT
DIMID
ZAEHL
ISOCODE
ANDEC
PRIMARY.
Idntico cdigo fuente a la izquierda
y derecha:
DO REPEAT TIMES.
T006-DIMID = DIMID.
T006-ZAEHL = ZAEHL.
T006-ISOCODE = ISOCODE.
T006-ANDEC = ANDEC.
T006-PRIMARY = PRIMARY.
I1
= REPEAT - SY-INDEX.
ENDDO.
ENDFORM.
DO REPEAT TIMES.
T006-DIMID = DIMID.
T006-ZAEHL = ZAEHL.
T006-ISOCODE = ISOCODE.
T006-ANDEC = ANDEC.
T006-PRIMARY = PRIMARY.
I1
= REPEAT - SY-INDEX.
ENDDO.
ENDFORM.
228 microsegundos
161 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
FIELD-SYMBOLS: <F>.
ASSIGN I1 TO <F>.
I2 = <F>.
I3 = <F>.
I4 = <F>.
ASSIGN I1 TO <I>.
I2 = <I>.
I3 = <I>.
I4 = <I>.
11 microsegundos
7 microsegundos
Case
'A'. WRITE '1'.
= 'B'. WRITE '2'.
= 'C'. WRITE '3'.
= 'D'. WRITE '4'.
= 'E'. WRITE '5'.
= 'F'. WRITE '6'.
= 'G'. WRITE '7'.
= 'H'. WRITE '8'.
16 microsegundos
CASE C1A.
WHEN 'A'. WRITE '1'.
WHEN 'B'. WRITE '2'.
WHEN 'C'. WRITE '3'.
WHEN 'D'. WRITE '4'.
WHEN 'E'. WRITE '5'.
WHEN 'F'. WRITE '6'.
WHEN 'G'. WRITE '7'.
WHEN 'H'. WRITE '8'.
ENDCASE.
7 microsegundos
Perform I Of
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
CASE I1.
WHEN 1. PERFORM
WHEN 2. PERFORM
WHEN 3. PERFORM
WHEN 4. PERFORM
WHEN 5. PERFORM
WHEN 6. PERFORM
WHEN 7. PERFORM
WHEN 8. PERFORM
ENDCASE.
PERFORM I1 OF
PV1.
PV2.
PV3.
PV4.
PV5.
PV6.
PV7.
PV8.
11 microsegundos
PV1
PV2
PV3
PV4
PV5
PV6
PV7
PV8.
6 microsegundos
Case
I1 = 0.
DO.
IF C1A NE SPACE. EXIT. ENDIF.
ADD 1 TO I1.
IF I1 GT 10. C1A = 'X'. ENDIF.
ENDDO.
I1 = 0.
WHILE C1A = SPACE.
ADD 1 TO I1.
IF I1 GT 10. C1A = 'X'. ENDIF.
ENDWHILE.
8 microsegundos
6 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
7. Conversin de Campos
7.1 Campos tipos I y P
Tipo P
Tipo I
DATA: IP TYPE P.
DO 5 TIMES.
IP = SY-INDEX * 2.
READ TABLE X100 INDEX IP.
ENDDO.
DATA: IP TYPE I.
DO 5 TIMES.
IP = SY-INDEX * 2.
READ TABLE X100 INDEX IP.
ENDDO.
78 microsegundos
37 microsegundos
Es mejor usar campos de tipo I para variable que son tipicamente enteras
tales como ndices.
Constantes tipo F
DATA:
FLOAT TYPE F.
CONSTANTS:
PI TYPE F VALUE
'3.1415926535897932'.
FLOAT = '3.1415926535897932'.
DATA:
FLOAT TYPE F.
FLOAT = PI.
22 microsegundo
1 microsegundo
Unicamente 1 tipo
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
F3 = F1 * F2.
46 microsegundos
F3 = F1 * F2.
1 microsegundos
Tipo I
SY-SUBRC = '0'.
CASE SY-SUBRC.
WHEN '1'.
WHEN '2'.
WHEN '3'.
WHEN '4'.
ENDCASE.
SY-SUBRC = 0.
CASE SY-SUBRC.
WHEN 1.
WHEN 2.
WHEN 3.
WHEN 4.
ENDCASE.
14 microsegundos
6 microsegundos
7.5 Aritmtica
Tipo N
Tipo P
DATA:
N1(15) TYPE N VALUE
'123456789012345',
N2(15) TYPE N VALUE
'543210987654321',
N3(15) TYPE N.
DATA:
P1
TYPE P VALUE
'123456789012345',
P2
TYPE P VALUE
'543210987654321',
P3
TYPE P.
N3 = N1 + N2.
P3 = P1 + P2.
29 microsegundos
8 microsegundos
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
8. UTILIZACIN DE TABLAS
TRANSPARENTES, POOL Y CLUSTERS
8.1 Tablas Transparentes y Pool
Cuando seleccione desde una tabla Transparente o Pool, siempre restrinja la
sentencia SELECT los ms posible con la opcin WHERE. Tambin con campos
de datos que pueden no ser parte de la clave. Esto permite a la Base de Datos
evaluar los registros y devolver solamente aquellos que concuerdan con el
criterio de seleccin.
Tablas transparentes y pool:
Select + Check
ENDSELECT.
Requiere ms memoria y buffer
Tablas Cluster:
Para tablas Cluster BSEG con claves MANDT, BUKRS, BELNR, GJAHR, y BUZEI:
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
Select + Check
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4
RENDIMIENTO EN LA PROGRAMACIN
ABAP/4