User Tools

Site Tools


abap:perf

This is an old revision of the document!


Performance

Tables

DB

  • Les INNER JOIN sont généralement à préférer aux FOR ALL ENTRIES.
  • La DB limite la taille des contraintes IN dans les clauses WHERE (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.

itab

  • Le LOOP AT .. WHERE passe par un optimiseur alors que pour le read table, ça doit être fait à la main avec le BINARY SEARCH.
  • Si la table peut posséder une clé primaire unique, la déclarer en HASHED et faire les READ TABLE .. WITH TABLE KEY et les LOOP 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 un READ TABLE .. BINARY SEARCH ou un LOOP AT .. WHERE sur la clé.
  • Si la table est SORTED ou HASHED, elle ne supportera pas les APPEND, il faudra utiliser des INSERT (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.1461850228.txt.gz · Last modified: 2016/04/28 15:30 by ginko