Was sind Multi-Row-Inserts?
Code:
INSERT INTO mytable (col_a, col_b) VALUES (1, 2), (2, 2), (3, 1);
Mysql und MariaDB können das, Firebird nicht. Da musst du sowas machen:
Code:
SET TERM #;
EXECUTE BLOCK (...)
AS BEGIN
INSERT INTO mytable (col_a, col_b) VALUES (1, 2);
INSERT INTO mytable (col_a, col_b) VALUES (2, 2);
INSERT INTO mytable (col_a, col_b) VALUES (3, 1);
END
#
SET TERM ;#
Unnötig zu sagen, dass das eine Menge Overhead ist. Vorallem bei der im Vergleich sehr bescheidenen Blockgröße. Bei MariaDB kann ich locker 100.000 Zeilen nach obiger Methode in einem Rutsch einfügen. Bei Firebird dürften es irgendwo zwischen 100 und 500 sein.
Weil Array-DML kann Firebird mit FireDAC.
Mag sein, dass man da clientseitig sowas machen kann (ich nutze kein FireDAC) aber letztendlich muss es doch wieder in einen Dialekt übersetzt werden, den der
FB-Server versteht. Das heißt, dass das auch noch intern auseinander gepflückt und neu zusammengesetzt werden muss. Am Ende hast du ja doch wieder das
Query-Pingpong, das netzwerklastig ist (wir haben es in der Praxis häufig mit sehr schlechten Netzwerken zu tun, manchmal steinalte 11b-WLANs am Rande der Reichweiten-Kotzgrenze)