Datenbank Index Thema ist als GELÖST markiert

Getting started ... Alles für einen gelungenen Start.
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Datenbank Index

Beitrag von A6272 (Specialist / 148 / 1 / 18 ) » 28.09.2020 13:45
Hallo,

ich habe einen Select, der braucht aktuell zu lang bis er was liefert.

Code: Alles auswählen.

  SELECT            *
         INTO TABLE ct_data_d[]
         FROM       zeedmt_zmon
         WHERE      docnum = '0000000000000000'
           AND      ztrack = iv_ztrack.
Es gibt einen Index MANDT/DOCNUM und mehrere die mit MANDT/ZTRACK/... beginnen.
In der SE16 mit nur docnum = '0000000000000000' (erste 500 von ca. 20 Mio) oder nur ztrack = iv_ztrack (5-10 Stück) ist quasi sofort fertig. Die gesuchten Einträge gehören eher zu den letzten hinzugefügten.

Frage: Ist eigentlich die Reihenfolge in der where-Bedingung relevant für die Auswahl des DB Index? bzw. würde eine Anpassung auf

Code: Alles auswählen.

 SELECT            *
         INTO TABLE ct_data_d[]
         FROM       zeedmt_zmon
         WHERE      ztrack = iv_ztrack
           AND      docnum = '0000000000000000'.
was bringen?

Alternative wäre ohne docnum zu selektieren und die paar Überflüssigen nachträglich zu löschen.

FYI: der Report stammt nicht von mir. Im Testsystem kann ich das nicht richtig testen. Daher muss ich quasi optisch beurteilen, ob die Korrektur meiner Inderin was an Performance bringt.


Re: Datenbank Index

Beitrag von a-dead-trousers (Top Expert / 3539 / 115 / 918 ) » 28.09.2020 14:51
Hi.

Da spielt leider mehr mit als nur die "Reihenfolge".
Ganz wichtig für SAP ist die "Spezifizität" oder "Eindeutigkeit" des Index für die Auswahl und dabei haben die sogenannten Datenbankstatistiken eine wichtige Rolle. Je mehr "Einzeldatensätze" pro Index identifiziert werden können, desto eher wird der Index genommen.

In deinem Fall dürfte die Änderung nichts bringen, da die Dokumentnummer(?) mit an Sicherheit grenzender Wahrscheinlichkeit mehr Einzeldatensätze identifizieren kann als der (vermutlich öfter vorkommende) Wert in ZTRACK.

Was du machen könntest, wäre entweder ...
... einen eigenen Index anzulegen, der alle drei Felder beinhaltet, da dürfte aber die zu erwartende Datenmege Probleme machen
... oder den zu verwendenen Index mittels HINT im SELECT-Statement fix vorgeben.

Alternativ um zumindest "schneller" die Ergebnisse verarbeiten zu können, was bei großen Datenmengen nicht zu verachten ist, könnte man auch mit PACKAGE SIZE arbeiten um so zumindest einen Kurzdump wegen zuwenig Speicher zu entgehen. Im Grunde werden dann z.B. 1000 Datensätze selektiert, im Programm verarbeitet, dann werden die nächsten 1000 Datensätze selektiert usw. Die Lautzeit bleibt dann zwar gleich, aber man "sieht" zumindest, dass etwas verarbeitet wird und der Debugger bleibt nicht "ewig" im SELECT-Statement hängen.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Datenbank Index

Beitrag von A6272 (Specialist / 148 / 1 / 18 ) » 28.09.2020 16:47
Hallo,

vielen Dank, dass solche Statistiken eine Auswirkung haben, war mir nicht (mehr) bewusst. Das kommt davon, wenn man seit über 10 Jahren nur noch programmieren lässt.
a-dead-trousers hat geschrieben:
28.09.2020 14:51
Ganz wichtig für SAP ist die "Spezifizität" oder "Eindeutigkeit" des Index für die Auswahl und dabei haben die sogenannten Datenbankstatistiken eine wichtige Rolle. Je mehr "Einzeldatensätze" pro Index identifiziert werden können, desto eher wird der Index genommen.

In deinem Fall dürfte die Änderung nichts bringen, da die Dokumentnummer(?) mit an Sicherheit grenzender Wahrscheinlichkeit mehr Einzeldatensätze identifizieren kann als der (vermutlich öfter vorkommende) Wert in ZTRACK.
OK, dann ist klar, warum er den ungünstigen INDEX nimmt.
Menge ist kein Problem, der Select liefert wegen ZTRACK nie mehr wie 10-15 Einträge. docnum = '0000000000000000' alleine liefert aber aktuell 20Mio.

Meine Inderin hat es angepasst: Sie selektiert ohne docnum und löscht die paar Überflüssigen nachträglich, sollte es auch tun.

Re: Datenbank Index

Beitrag von DeathAndPain (Top Expert / 1436 / 156 / 329 ) » 28.09.2020 18:09
Ansonsten ist zu erwähnen, dass die Reihenfolge der Parameter im SELECT egal ist. Die Datenbank schaut sich an, was Du alles bietest und sucht sich dann den passenden Index heraus. Das pflegt sehr gut zu funktionieren.

Aber wenn docnum so schlecht ist, dass es 20 Mio Einträge mit derselben docnum gibt, weshalb habt ihr dann auf eurer Datenbank überhaupt einen Index angelegt, der damit anfängt? An eurer Stelle würde ich überlegen, ob ihr den wirklich braucht. Gibt es denn nennenswert Fälle, bei denen ihr nur anhand der docnum sucht?

Es würde auch die Möglichkeit bestehen, einen Index MANDT/ZTRACK/DOCNUM anzulegen. Wenn Du dann in der Datenbank genau mit diesen Feldern suchst, würde es mich sehr wundern, wenn der Datenbankoptimierer ihn nicht nehmen würde. Anscheinend hatten ja schon andere bei euch diese Idee, weswegen ihr bereits mehrere ZTRACK-Indizes habt. Aber natürlich muss jeder weitere Index verwaltet werden, was die Gesamtlast auf der Datenbank erhöht. Wer weiß, vielleicht würde ein Verzicht auf den docnum-Index bewirken, dass einige der ZTRACK-Indizes auch nicht mehr erforderlich sind?

Re: Datenbank Index

Beitrag von A6272 (Specialist / 148 / 1 / 18 ) » 29.09.2020 11:43
Der Report stellt eine Verknüpfung zwischen IDOC Nummer und Monitoring Eintrag her. Ursprünglich sollten nach Durchlauf des Reports keine Einträge mehr mit docnum = '0000000000000000' existieren, aber inzwischen sind diverse Prozesse dazugekommen, die kein IDOC im SAP erzeugen, aber Einträge für das Monitoring in diese Tabelle schreiben.

Pro IDOC Nummer (>0) gibt es auch nur 5-10 Einträge. Nach IDOC Nummer zu suchen ist durchaus ein sehr häufiger Anwendungsfall.

Seite 1 von 1

Über diesen Beitrag



Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Vergleichbare Themen

Datenbank-Index
von Charadin » 19.11.2007 12:23
FAQ Index
von Jan » 02.08.2005 08:08
Index im where Teil
von kaim77 » 10.09.2014 08:54
Index / Indizes
von Phame » 20.08.2015 13:05
Laufvariable / Index
von Lbyte » 27.10.2017 15:50