MSSQL multiple insert, SQL SERVER 2005
Článek určen pro ty, kdo jsou vázání na SQL SERVER 2005 a starší. Popisuje hlavně rozdíly mezi MySQL. Dnes se jedná o hromadný insert (což považuji za jednu z killer optimalizačních features). Stejný problém však najdete i u sqlite.
Čas od času potřebujete databázi naplnit větším množstvím dat, u mne se běžně jedná třeba jen o klíč a hodnotu.
Hromadný insert je jedna z dalších nedostatků starších verzí jazyka T-SQL, který se projevuje u verzí SQL Serveru 2005 a starších.
V MySQL hromadný insert vypadá takto:
- INSERT INTO table (id, key, value) VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9), (10, 11, 12);
Rychlost tohoto dotazu je obrovská v porovnání s řešením v MSSQL.
Kde to lze řešit dvěma způsoby, opakovaným dotazem:
- INSERT INTO table (id, key, value) VALUES (1, 2, 3);
- INSERT INTO table (id, key, value) VALUES (4, 5, 6);
- INSERT INTO table (id, key, value) VALUES (7, 8, 9);
nebo sjednoceným selectem v jednom dotazu:
- INSERT INTO table (id, key, value)
- SELECT 1, 2, 3
- UNION ALL
- SELECT 4, 5, 6
- UNION ALL
- SELECT 7, 8, 9
Druhá možnost je sice rychlejší, nicméně testování na desítkách tisíc záznamů se mi jeví jako žalostné, bavíme se tady o desítkách sekund na celkem výkonném hardware.
POZOR SQLITE JE NA TOM STEJNĚ!