abap:perf
Table of Contents
Performance
Tables
DB
- Les
INNER JOIN
sont généralement à préférer auxFOR ALL ENTRIES
. - La DB limite la taille des contraintes
IN
dans les clausesWHERE
(le traducteur SQL écrit en fait des contraintes classiques avec des identités ou des BETWEEN, qui peuvent être très (très) longues). En général cette limite est d'ordre du millier (dépend de la longueur du champ). - Sur une grosse requête, toujours mettre une contrainte sur au moins l'un des index de chaque table.
- Lors de la création des indexes, ne jamais oublier de mettre le champs
MANDT
… le kernel a beau gérer le champsMANDT
en scred assez souvent (SELECT
, champs de jointure, etc), il reste des cas où il faut tout de même citer explicitement le champs (par exemple lors d'unINNER JOIN
, il faut sélectionner explicitement le champs mandant si on veut récupérer l'intégralité des champs de l'une des tables).
itab
- Le
LOOP AT .. WHERE
passe par un optimiseur alors que pour le read table, ça doit être fait à la main avec leBINARY SEARCH
. - Si la table peut posséder une clé primaire unique, la déclarer en
HASHED
et faire lesREAD TABLE .. WITH TABLE KEY
et lesLOOP AT .. WHERE
sur la clé. - Si la table ne possède pas l'unicité de la clé, la déclarer en
SORTED
. - Si la table est
STANDARD
, toujours la trier par la clé avant de faire unREAD TABLE .. BINARY SEARCH
ou unLOOP AT .. WHERE
sur la clé. - Si la table est
SORTED
ouHASHED
, elle ne supportera pas lesAPPEND
, il faudra utiliser desINSERT
(avec le léger surcoût d'insertion du au tri ou à l'algo de hashage).
Parallel cursor
Le parallel cursor est une technique pour lire efficacement 2 tables internes liées par une jointure de type “entête-poste”. Elle consiste à optimiser les nested loops en passant par un read table binary search, prendre le sy-tabix
, faire la nested loop FROM
cet index et boucler jusqu'à ce que la clé change. Sauce
abap/perf.txt · Last modified: 2016/06/21 17:23 by ginko