sql >> Databasteknik >  >> RDS >> Sqlserver

tsql - Batch-insättningsprestanda

Även om det kan tyckas som om mindre kod att bearbeta borde ge dig en prestandavinst, är det en dålig idé att använda första alternativet (union all). Alla valda uttalanden måste analyseras och köras innan data infogas i en tabell. Det kommer att förbruka mycket minne och kan ta en evighet att slutföra även för en ganska liten mängd data. Å andra sidan exekveras separata insert-satser "on the fly".

Kör ett enkelt test i SSMS som kommer att bevisa detta:skapa en enkel tabell med 4 fält och försök att infoga 20k rader. Den andra lösningen kommer att köras på några sekunder, medan den första... du får se :).

Ett annat problem är att när data inte är korrekta i en rad (typ oöverensstämmelse till exempel), kommer du att få ett felmeddelande som Conversion failed when converting the varchar value 'x' to data type int. , men du kommer inte att ha någon indikation på vilken rad som misslyckades - du måste hitta den själv. Men med separata insatser vet du exakt vilken insättning som misslyckades.




  1. Är det möjligt att göra sql-injektion med lagrade procedurer?

  2. Kan en MySQL-fråga förvandla rader till kolumner?

  3. java.sql.SQLException:Okänd systemvariabel 'query_cache_size'

  4. Hur hänger dessa tabeller ihop?