In meiner App füge ich mehrzeilige Einfügungen ein, wenn ich kann, nur weil dadurch die Anzahl der Roundtrips zwischen der Datenbank und der App verringert wird.
Ich war jedoch neugierig, gibt es noch andere Vorteile? Wenn beispielsweise mehrere Zeilen gleichzeitig eingefügt werden:
insert into tbl (c1, c2) values
(v1, v2)
(v3, v4)
gegen:
insert into tbl (c1, c2) values (v1, v2)
insert into tbl (c1, c2) values (v3, v4)
und die Tabelle hat einen Index. Wird der Index im ersten Fall einmal und im zweiten Fall zweimal berechnet? Oder ist es immer einmal pro Beilage? Angenommen, beide Abfragen befinden sich in derselben Transaktion.
Ich benutze PostgreSQL.
postgresql
index
optimization
cdmckay
quelle
quelle
Antworten:
Ich denke, @a_horse_with_no_name hat Recht damit, dass der Index einmal pro Anweisung aktualisiert wird, denn wenn die Anweisung ihre Ausführung nicht abgeschlossen hat, sind die Daten nicht sichtbar, da sie sich in der Transaktion befinden. Und die Definition einer Anweisung beinhaltet mehrere Werte
Und gemäß den hier beschriebenen Dokumenten funktioniert die Indexerstellung / -aktualisierung mit Stapeln effizienter als mit einzelnen Anweisungen.
Es gibt auch einen schönen Artikel von Peter Manis über die Leistung verschiedener Insert-Methoden, den ich empfehlen kann.
Eine andere Sache, die Sie beachten sollten, ist der
FILLFACTOR
Index, da er sich auf die Performance auswirkt, wie Fabien Coelho hier beschreibt .quelle
Ich glaube nicht, dass es derzeit Optimierungsunterschiede im Bereich der Indexpflege in dieser Hinsicht gibt.
Neben dem Netzwerk-Overhead liegen die weiteren Vorteile der mehrwertigen Anweisung im Parsen, Sperren usw. (Auch wenn die Tabellensperre
tbl
von der ersten Einfügeanweisung übernommen und dann während des restlichen Transaktionsvorgangs bei jeder Einfügung beibehalten wird Anweisung muss noch überprüfen, ob die Sperre gehalten wird, und diese Überprüfung ist nicht kostenlos)quelle