ABAP - Interne Tabellen (Performance)
Der zweite Teil zum Thema interne Tabellen, ihre Verarbeitung und Performance beim Zugriff auf die Daten. Heute mit dem Fokus auf die Performance beim Lesen der Daten.
Inhaltsverzeichnis
Was du beim Zugriff über die neuen Methoden beachten solltest, ist vor allem das Thema Performance. Wenn du viele Daten und oft Lesen musst aus nternen Tabellen, sollten diese auch dafür vorbereitet werden.
Ein Lesen über den Index, wenn möglich, ist auf jeden Fall immer schnell. Doch nicht in jedem Fall kann und wird mit diesem Schlüssel gearbeitet. In den folgenden Punkten erklären wir dir, wie es sich mit dem Zugriff auf die Daten verhält.
Lesen per Index
Das Lesen über den Index ist immer schnell, hier hält SAP einen eigenen Schlüssel vor, der den Zugriff auf spezielle Zeilen beschleunigt. Hier muss nichts an der Performance angepasst oder verbessert werden, dieser Schlüssel ist immer schnell.
" Index Zugriff
DATA(ls_t001) = lt_t001[ 1 ].
Lesen per Schlüssel
Etwas kritischer sieht es schon beim Lesen über einen Schlüssel aus. Hier sollte beachtet werden, ob die Tabelle einen Schlüssel hat und entsprechend sortiert ist.
Performanceprobleme machen hier in den meisten Fällen die Standard Tabellen, da diese entweder einen "Schrott"- oder "Empty"-Schlüssel haben. Hier lässt sich nur sinnvoll lesen, wenn die Datenmenge kleiner 100 Datensätze ist, da alles andere nur unerträglich langsam ist.
Von daher haben wir für diesen Fall eine Liste für dich zusammengestellt, um dir die gängisten schnellen und langsamen Zugriffe aufzuzeigen.
Langsame Zugriffe
- Standard Tabelle mit Default/Empty Key
- Tabelle mit Secondary Key ohne Angabe beim Zugriff
Schnelle Zugriffe
- Sortierte Tabelle
- Hash Tabelle
- Secondary Key mit Angabe beim Zugriff
- Read Table mit Binary Search (Daten müssen sortiert sein)
Zur besseren Darstellung und Visualisierung der Zugriffe, wollen wir dir im dritten Teil einen einfachen Report vorstellen, mit dem du die Zugriffe und die Zugriffszeiten prüfen/testen kannst.
Lesen von Feldern
Arbeitest du mit einem freien Schlüsselzugriff und möchtest nur Felder aus der Tabelle lesen, solltest du dies aber auch nur mit einem Feld so machen. Schnell wirst du verleitet diesen Zugriff immer und immer wieder zu verwenden. Du solltest aber daran denken, dass jeder dieser Zugriffe auf ein erneutes Lesen der Internen Tabelle auslöst und damit genau so zu Performance-Problemen führen kann.
" Schlechtes Beispiel
ls_data-waers = lt_t001[ bukrs = 'ABCD' ]-waers.
ls_data-btext = lt_t001[ bukrs = 'ABCD' ]-butxt.
ls_data-taxno = lt_t001[ bukrs = 'ABCD' ]-stceg.
" Besseres Beispiel
DATA(ls_t001) = lt_t001[ bukrs = 'ABCD' ].
ls_data-waers = ls_t001-waers.
ls_data-btext = ls_t001-butxt.
ls_data-taxno = ls_t001-stceg.
Fazit
Beim Lesen der internen Tabellen haben wir vor allem auf das Thema Modernes ABAP fokusiert, um die Neuerungen und möglichen Fehlerquellen aufzuzeigen. Beim Zugriff über READ TABLE kann man einige Schwächen der neuen Funktionen vermeiden, ist aber dann auch der alt-gewohnte Programmierstil.