Bobby: Welches INSERT ist Schneller?

Moin

Welche Variante ist schneller? oder gibt es keine Unterschiede?

  
INSERT INTO table (a, b, c) VALUES (1, 2, 3)  
INSERT INTO table VALUES (1, 2, 3)  
INSERT INTO table SET a=1, b=2, c=3  

Gruß Bobby

--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
### Henry L. Mencken ###
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
## Viktor Frankl ###
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  1. Moin Moin!

    Welche Variante ist schneller? oder gibt es keine Unterschiede?

    Warum mißt Du nicht selbst?

    INSERT INTO table (a, b, c) VALUES (1, 2, 3)
    INSERT INTO table VALUES (1, 2, 3)

      
    Das sieht aus wie normales SQL.  
      
    
    > ~~~sql
      
    
    > INSERT INTO table SET a=1, b=2, c=3  
    > 
    
    

    Das nicht. MySQL? Da gelten ohnehin völlig andere Regeln ...

    Gruß Bobby

    *DER* Bobby? Bobby Tables? ;-)

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Moin

      INSERT INTO table (a, b, c) VALUES (1, 2, 3)
      INSERT INTO table VALUES (1, 2, 3)

      
      >   
      > Das sieht aus wie normales SQL.  
      >   
      > > ~~~sql
        
      
      > > INSERT INTO table SET a=1, b=2, c=3  
      > > 
      
      

      Das nicht. MySQL? Da gelten ohnehin völlig andere Regeln ...

      Sorry ich meinte MySQL

      *DER* Bobby? Bobby Tables? ;-)

      NEIN

      Gruß Bobby

      --
      -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
      ### Henry L. Mencken ###
      -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
      ## Viktor Frankl ###
      ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    2. Moin

      Warum mißt Du nicht selbst?

      So, Hab mir die Mühe gemacht mal zu messen, allerdings nur mit 10 Abfragen. Aber da wird bereits ein Trend sichtbar.

        
      INSERT INTO table (a, b, c) VALUES (1, 2, 3)  
      INSERT INTO table VALUES (1, 2, 3)  
      
      

      Diese beiden nehmen sich nicht viel, wobei das 1. Insert einen kleinen Geschwindigkeitsvorteil hat. Dieser ist sehr sehr gering (Durchschnitt: 0,04728 zu 0,04786 sekunden)

        
      INSERT INTO table SET a=1, b=2, c=3  
      
      

      Hier ist der Unterschied zu den anderen beiden Abfragen schon wesentlich deutlicher. (Durchschnitt 0,06171 sekunden)

      Ich werde mich wohl zukünftig für die erste Variante entscheiden.

      Gruß Bobby

      --
      -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
      ### Henry L. Mencken ###
      -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
      ## Viktor Frankl ###
      ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
      1. Moin Moin!

        Warum mißt Du nicht selbst?

        So, Hab mir die Mühe gemacht mal zu messen, allerdings nur mit 10 Abfragen. Aber da wird bereits ein Trend sichtbar.

        Nö, da besch...ummelst Du Dich selbst. 10 Abfragen sind völliger Mumpitz, da geht der eigentliche Aufwand völlig im Rauschen unter. Laß 10.000 Abfragen laufen, mit zufälligen Daten, um Caching zu verhindern. Dann kannst Du eine grobe Schätzung angeben.

        Wenn Du wirklich ernsthaft messen willst, setzt Du vor jeder Messung die DB wieder auf einen definierten Zustand zurück (inkl. DB-Prozess, d.h. DB neu starten).

        Wie kommst Du übrigens auf die 0,04 Sekunden? Handgestoppt? Dann Respekt! ;-)

        Wenn Du den Rechner messen läßt, haut Dir bei so kurzen Zeiten auch noch das Betriebssystem jede Menge Müll in die Messung rein.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  2. Welche Variante ist schneller? oder gibt es keine Unterschiede?

    Vermutlich nur geringe keine.

    Die Frage ist, warum Du das wissen willst. Für einen Eintrag lohnt die Optimierung nicht. Willst Du aber viele tausend Zeilen eintragen, so sorge dafür, dass die Indexe erst angelegt werden, wenn der Import beendet ist. Damit vermeidest Du das zeitaufwenige Indexieren für jeden Insert.

    Jörg Reinholz

  3. INSERT INTO table VALUES (1, 2, 3)

    Ohne Angabe der Spaltennamen würd ich hier noch einiges an Zeit für Fehlersuche einrechnen ;-)
    Ich würd schon ausdrücklich benennen was wo eingetragen werden soll, auch falls es geringfügig langsamer wäre.