Günther S: Maximale Anzahl von Einträgen pro INSERT

Hallo zusammen,

ich habe leider im mysql manual nichts wirklich passendes zu meiner frage gefunden:
Wie viele datensätze kann man grob mittels "INSERT INTO table (feld1, feld2, ...) VALUES (...), ..." auf einmal in eine tabelle schreiben lassen, ohne dass man die sql verbindung verliert?
(Gerne auch Erfahrungswerte)

Gruß,
Günther S

  1. n'abend,

    Wie viele datensätze kann man grob mittels "INSERT INTO table (feld1, feld2, ...) VALUES (...), ..." auf einmal in eine tabelle schreiben lassen, ohne dass man die sql verbindung verliert?

    ohne zu wissen von welcher MySQL Version du sprichst kann dir wohl keiner eine Antwort auf deine Frage geben.

    (Gerne auch Erfahrungswerte)

    In der Regel breche ich große Inserts in Blöcke zu je 100-500 Datensätzen auf, je nachdem wie viele Daten ein Datensatz enthält.

    weiterhin schönen abend...

    --
    wer braucht schon großbuchstaben?
    sh:( fo:# ch:# rl:° br:> n4:& ie:{ mo:} va:) de:] zu:} fl:{ ss:? ls:[ js:|
    1. Hallo,

      ohne zu wissen von welcher MySQL Version du sprichst kann dir wohl keiner eine Antwort auf deine Frage geben.

      Mysql >= 4.x

      In der Regel breche ich große Inserts in Blöcke zu je 100-500 Datensätzen auf, je nachdem wie viele Daten ein Datensatz enthält.

      Als beispiel hätte ich hier eine Tabelle mit durchschnittlicher Zeilengröße von rund 500 Bytes. Mit 1000 Datensätze pro INSERT scheint mir das ganze noch zuverlässig zu laufen, sprich ca. 500 kB pro INSERT.

      Ist das zu viel? Kann ich (ohne deutlichen Zuverlässigkeitsverlust) noch mehr wagen?

      Gruß,
      Günther

      1. n'abend,

        Mysql >= 4.x

        ist keine brauchbare Antwort, da 4.1.x im Gegensatz zu 4.0.x (teilweise fundamentale) Neuerungen besitzt.

        Als beispiel hätte ich hier eine Tabelle mit durchschnittlicher Zeilengröße von rund 500 Bytes. Mit 1000 Datensätze pro INSERT scheint mir das ganze noch zuverlässig zu laufen, sprich ca. 500 kB pro INSERT.
        Ist das zu viel? Kann ich (ohne deutlichen Zuverlässigkeitsverlust) noch mehr wagen?

        Das hängt imho davon ab, ob du
        (a) entsprechend verhinderst, dass der User den Prozess abbrechen kann
        (b) das Zusammensetzen der Insert-Query nicht zu lange dauert (timeout)
        (c) du beachtest, dass 500 Bytes _Daten_ in einer Query noch durch syntaktische Elemente wie Anführungszeichen, Leerzeichen, Kommata, etc. erweitert werden
        (d) hab ich eigentlich keine Ahnung und spekuliere :)

        weiterhin schönen abend...

        --
        wer braucht schon großbuchstaben?
        sh:( fo:# ch:# rl:° br:> n4:& ie:{ mo:} va:) de:] zu:} fl:{ ss:? ls:[ js:|
  2. Wie viele datensätze kann man grob mittels "INSERT INTO table (feld1, feld2, ...) VALUES (...), ..." auf einmal in eine tabelle schreiben lassen, ohne dass man die sql verbindung verliert?

    So viel Du willst, aber ab, sagen wir mal, 100 Datensätze solltest Du die Massenimport-Schnittstelle von mySQL nutzen.

    Mit wievielen Datensätzen rechnest Du?

    1. Hallo,

      So viel Du willst, aber ab, sagen wir mal, 100 Datensätze solltest Du die Massenimport-Schnittstelle von mySQL nutzen.

      Ich habe mich unpräzise ausgedrückt. Ich will das ganze aus einem PHP script heraus machen lassen, nicht direkt über die konsole.
      Und da verliere ich (zumindest mittels mysql_query("INSERT INTO...");) konsequent die Verbindung, wenn ich zu viele Datensätze auf einmal einfügen will.

      Wie sieht diese Massenimport-Schnittstelle konkret aus?

      Mit wievielen Datensätzen rechnest Du?

      Um einige 10er-Potenzen mehr als 100 ;)

      MfG,
      Günther

      1. Wie sieht diese Massenimport-Schnittstelle konkret aus?

        Versionsabhängig vermute ich mal, bspw. so:
        http://dev.mysql.com/doc/refman/5.1/de/mysqlimport.html

      2. n'abend,

        Und da verliere ich (zumindest mittels mysql_query("INSERT INTO...");) konsequent die Verbindung, wenn ich zu viele Datensätze auf einmal einfügen will.

        das wird dann wohl daran liegen, dass MySQL keine Lust mehr hat auf dich und deine Daten-sammel-Aktion zu warten und einfach die Verbindung kappt (timeout).

        weiterhin schönen abend...

        --
        wer braucht schon großbuchstaben?
        sh:( fo:# ch:# rl:° br:> n4:& ie:{ mo:} va:) de:] zu:} fl:{ ss:? ls:[ js:|
  3. Moin!

    Wie viele datensätze kann man grob mittels "INSERT INTO table (feld1, feld2, ...) VALUES (...), ..." auf einmal in eine tabelle schreiben lassen, ohne dass man die sql verbindung verliert?

    Soviele, so dass die maximale Querygröße nicht überschritten wird.

    Wieviel das ist, sagt dir

      
    SHOW VARIABLES LIKE 'max_allowed_packet';  
    
    

    Und was man dagegen tun kann, wenn der Wert einem zu klein oder sonst unpassend ist und es Fehlermeldungen gibt (Packet too large Error), steht in http://dev.mysql.com/doc/refman/5.0/en/packet-too-large.html.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
  4. hi,

    was vielleicht auch berücksichtigt werden sollte, sind weitere Faktoren, die die Geschwindigkeit von Inserts/Updates beeinflussen können - beispielsweise Indizes/Keys, die neu aufgebaut werden müssen.
    Allerdings dürfte da ein größere Menge gemeinsam in einem Statement übergebener Daten sich günstiger auswirken, als eine zu kleine Stückelung.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }