Arbeit auslagern

Um Ihre Programme möglichst schnell zu machen, müssen Sie die Datenbank die meiste Arbeit machen lassen. Hier erfahren Sie, wie es am besten funktioniert.

Lassen Sie die Datenbank arbeiten, nicht das ABAP-Programm

Der wichtigste Grundsatz bei der Programmierung von Programmen, die häufig auf die Datenbank zugreifen, ist der folgende:

Lagern Sie so viel Arbeit wie möglich auf die Datenbank aus!

Der langsamste Teil in der Verarbeitung ist der Datentransport zwischen der Datenbank und ABAP-Programm!

Das bedeutet im Einzelnen:

Lesen Sie so viele Daten wie möglich so differenziert wie möglich in eine interne Tabelle.

Ausnahme 1: Wenn Sie mehrere Millionen Datensätze selektieren, belasten Sie damit den Hauptspeicher des Systems. Da Ihnen nur ein begrenzter Bereich davon zur Verfügung steht, würde ein Teil wieder auf die Festplatte ausgelagert werden (Swapping), was sich wieder negativ auf die Performance auswirkt!

Ausnahme 2: Die Sortierung sollte innerhalb des ABAP-Programms erfolgen und nicht mittels der ORDER-BY-Klausel. (siehe auch ORDER BY)

Verwenden Sie Joins

Die Verwendung von JOINS macht eine Anwendung deshalb schneller, weil die Datenbank schon die Daten zusammensucht, die Sie auch benötigen.

Ein Anwendung, die Daten in eine interne Tabelle schreibt, hierüber “loopt” und innerhalb des LOOPs wieder Daten einliest, ist um ein vielfaches langsamer, als ein JOIN, der gleich die Daten zusammensucht

Beispiel: Lesen von Materialstammdaten aus verschiedenen Tabellen

DATA:
  BEGIN OF itab OCCURS 0,
    matnr TYPE matnr,
    mtart TYPE mtart,
    maktx TYPE maktx,
  END OF itab.

*– langsame Variante –*
SELECT matnr mtart FROM mara INTO TABLE itab
 WHERE mtart IN s_mtart.

LOOP AT itab.
  SELECT SINGLE maktx FROM makt into itab-maktx
   WHERE matnr = itab-matnr
     AND spras = sy-langu.
  MODIFY itab.
ENDLOOP.

*– Schnelle Variante –*
SELECT mara~matnr mara~mtart makt~maktx 
  FROM mara
 INNER JOIN makt ON mara~matnr = makt~matnr
  INTO TABLE itab
 WHERE mara~mtart IN s_mtart
   AND makt~spras = sy-langu.

Enno Wulff

Leave a Comment