2009-06-02 4 views
0

Was ist effizienter und um wie viel?mysql Leistungsvergleich

Typ 1:

insert into table_name(column1,column2..) select column1,column2 ... from another_table where 

columnX in (value_list) 

Typ 2:

insert into table_name(column1,column2..) values (column1_0,column2_0..),(column1_1,column2_1..) 

Die erste Ausgabe sieht kurz, und der zweite kann extrem lang werden, wenn value_list enthält, etwa 500 oder sogar mehr Werte.

Aber ich habe keine Ahnung von wessen Leistung wird besser, obwohl das Gefühl der erste sollte effizienter, intuitiv sein.

Antwort

2

Die erste ist sauberer, vor allem, wenn Ihre Spalten bereits in mysql sind (was ich vermute, dass Sie sagen?). Sie sparen Zeit beim Senden von Daten und beim Parsen der Zeit und müssen sich weniger Sorgen darüber machen, ob Sie die maximale Größe Ihres Clients erreichen.

Im Allgemeinen würde ich jedoch erwarten, dass die Leistung ähnlich ist, wenn die Anzahl der Zeilen größer wird, insbesondere bei einer gut indizierten Tabelle. Die meiste Zeit für Einfügungen mit großen Abfragen wird beispielsweise mit dem Erstellen von Indizes verbracht (siehe here), und beide Abfragen müssten, wenn die Indizes nicht ausgeschaltet sind, ausgeführt werden.

+0

Ich möchte +1, aber ich möchte nicht Ihre 666 Rep zu brechen. ;) –

+0

Ach, hat schon jemand gemacht. Jetzt muss ich auf eine Abstimmungsrunde gehen –

0

Ich stimme Todd zu, die erste Abfrage ist sauberer und wird schneller an den MySQL-Server senden und schneller zu kompilieren. Und es stimmt wahrscheinlich, dass die Geschwindigkeitsdifferenz sinkt, wenn die Anzahl der eingefügten Datensätze zunimmt.

Aber die erste Form hat erhebliche weitere Vorteile zu berücksichtigen:

  • Es ist viel leichter zu pflegen: Sie müssen nur ab und zu ein Feld hinzufügen oder ändern.
  • Sie vermeiden die Kosten für die Abfrage von another_table und die Verarbeitung der Ergebnisse zur Verkettung der zweiten Abfrage (versteckte Kosten für diesen Ansatz).
  • Wenn Sie dieses Update mehrmals ausführen müssen, kann die erste Abfrage zusammen mit dem kompilierten Formular- und Abfrageplan im MySQL-Server zwischengespeichert werden. Dadurch werden nachfolgende Aufrufe der Abfrage ein wenig schneller ausgeführt.
Verwandte Themen