Hoscha: Optimierungen bei mehreren INSERT-Statements in einer Schleife

Guten Morgen,
Mein Thread befindet sich leider schon im Archiv und ich habe keine Möglichkeit, darauf zu antworten...

Ich muss mehrere INSERT-Statements in einer Schleife mehrere hundert mal auführen und hatte nach etwaigen Optmierungsmöglichkeiten gefragt.
Michael Schröpfl hat mir folgendes empfohlen:

Mußt Du diese Statements aber viele tausend Male ausführen, dann >> versuche nicht, um einen Faktor von 2 zu optimieren, sondern um >> einen Faktor von vielen Tausend - indem Du die Übersetzung der >> Statements aus der Schleife auslagerst (Host-Variablen etc.).

Michael, was genau meinst du mit der Auslagerung der Übersetzung der Statements?
Dass das Initialisieren ausserhalb der Schleifen plaziert werden sollte, ist logisch.

Viele Grüße,
Holger

  1. Hallo Holger

    Michael, was genau meinst du mit der Auslagerung der Übersetzung der

    »»Statements?

    Dass das Initialisieren ausserhalb der Schleifen plaziert werden sollte,
    ist logisch.

    Die Optimierung, die gemeint ist, sind sogenannte "Prepared" Statements, die
    es bei mehreren Sprachen (z.B. Java) gibt.

    Im Normalfall werden SQL-Kommandos von der DB jedesmal vor der Ausführung übersetzt.
    Bei der Verwendung von "Prepared" Statements wird das Kommando einmal von
    der DB übersetzt und es sind von der DB nur die Parameter für die variablen Elemente
    zu übernehmen.

    Gruß

    Ralf

    1. Im Normalfall werden SQL-Kommandos von der DB jedesmal vor der Ausführung übersetzt.
      Bei der Verwendung von "Prepared" Statements wird das Kommando einmal von
      der DB übersetzt und es sind von der DB nur die Parameter für die variablen Elemente
      zu übernehmen.

      Das klingt sehr gut !!! Da werde ich einmal die Dokumentation für Details zu Rate ziehen.

      Gruss,
      Hoscha

      1. Hi Hoscha,

        Das klingt sehr gut !!! Da werde ich einmal die Dokumentation für Details zu Rate ziehen.

        ich habe für diesen Mechanismus die Bezeichnung "Host-Variablen" verschiedentlich gelesen - das könnte ein tauglicher Suchbegriff sein.

        Die Idee dabei ist, daß der Query Optimizer in vielen Fällen das Statement bereits in ein Metasprachen-Programm umsetzen kann, ohne beispielsweise die Werte von Konstanten in INSERT- oder auch SELECT-Statements (WHERE-Klausel) zu diesem Zeitpunkt bereits zu kennen.

        Eine andere Optimierung - gerade für INSERT - kann die Möglichkeit sein, der API gar nicht die einzelnen Datensätze zum Einfügen zu übergeben, sondern gleich einen Verweis auf einen Array solcher Datensätze.
        Oracle kann das beispielsweise - und ich habe bei großen Datenmengen auf diese Weise einen Faktor von 7-8 an SELECT-Geschwindigkeit gewonnen, weil die SQL-API eben nur noch ganz selten durchlaufen werden mußte.

        Viele Grüße
              Michael

        --
        T'Pol: I apologize if I acted inappropriately.
        V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.