SELECT mit Feldleiste

Dies ist Teil 3 von 10 der Serie Performance-Workshop

Selektion nur benötigter Felder bringt einen kleinen Geschwindigkeitsvorteil. Im Zusammenhang mit internen Tabellen kann dies eine große Performancesteigerung bedeuten.

Das Selektieren aller Felder einer Tabelle ist durchaus üblich und in der Regel auch in Ordnung.

Die folgende Anweisung ist sehr kurz und macht das Programm sehr einfach lesbar:

SELECT * FROM kna1 INTO TABLE it_kna1
 WHERE kunnr IN s_kunnr.

Wenn Sie jedoch eine Tabelle lesen, die sehr viele Felder hat und Sie viel auf die interne Tabelle zugreifen und sie vielleicht noch häufig sortieren, dann sollten Sie sich auf die Felder beschränken, die Sie wirklich benötigen.

Eine interne Tabelle benötigt Speicherplatz. Je breiter die Tabelle – also je mehr Felder sie hat – desto mehr Speicherplatz benötigt die interne Tabelle.

Bei einem Datenvolumen von einigen hundert Einträgen ist es relativ irrelevant, ob die interne Tabelle nun ein oder zwei Megabyte Hauptspeicher beansprucht.

Bei mehreren tausend Einträgen ist es aber schon sinnvoll, darauf zu achten, dass die Tabelle so klein wie möglich ist. Das verringert nicht nur den Bedarf im Hauptspeicher, es werden auch weniger Daten von der Datenbank transferiert.

Folgendes Coding zeigt die gezielte Selektion von einzelnen Feldern:

DATA:
  BEGIN OF it_kna1 OCCURS 0,
    kunnr TYPE kunnr,
    land1 TYPE land1,
  END OF it_kna1.

SELECT kunnr land1 FROM kna1 INTO TABLE it_kna1
 WHERE kunnr IN s_kunnr.

Die Reihenfolge im SELECT muss dabei auch der Reihenfolge der Datendeklarierung entsprechen.

Vermeiden Sie möglichst den folgenden Fall mit dem Zusatz “INTO CORRESPONDING FIELDS”:

SELECT kunnr land1 FROM kna1
  INTO CORRESPONDING FIELDS OF TABLE it_kna1
 WHERE kunnr IN s_kunnr.

Diese Version ist deutlich langsamer, da das System noch einen Abgleich zwischen den selektierten Feldern und den Feldern in der internen Tabelle machen muss!!!

Im großen und ganzen macht es Sinn, sich von Anfang an auf die Felder zu beschränken, die auch benötigt werden. Das Programm ist dadurch leichter zu warten, da man schnell erkennen kann, welche Felder verwendet werden.

Beim Hinzufügen neuer Felder müssen Sie allerdings darauf achten, dass die Reihenfolge eingehalten wird:

DATA:
  BEGIN OF it_kna1 OCCURS 0,
    kunnr TYPE kunnr,
    name1 TYPE name1,
    land1 TYPE land1,
  END OF it_kna1.

SELECT kunnr name1 land1 FROM kna1 INTO TABLE it_kna1
 WHERE kunnr IN s_kunnr.

Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)
Series Navigation<< SELECT – ENDSELECTGeschachtelter SELECT >>