Fragensteller
schnelleres Insert

Allgemeine Diskussion
-
Hallo!
Ich würde gern wissen, ob es eine schneller Methode gibt Datensätze aus einer Tabelle in eine andere zu übertragen als die, die ich momentan verwende. Ohne jegliche Einschränkungen, d.h. die Daten der ersten Tabelle wurden schon vorher geprüft, ob sie irgendwelche Contrains verletzen könnten.
Momentan verwende ich ein INSERT INTO table2 SELECT * FROM table1
Ich hatte mir überlegt, vorher alle PK und FK zu löschen, den INSERT durch zuführen und danach die PK und FK neu zu setzen. Aber ich kann mir vorstellen, dass MS da eine schickere Lösung anbietet.
Würde mich freuen, wenn mir jemand einen Tip geben könnte.
- Typ geändert Robert BreitenhoferModerator Freitag, 13. Mai 2011 14:56 Keine Rückmeldung des Fragenstellender
Alle Antworten
-
Ohne den genauen Hintergrund der Frage zu kennen, scheint mir das der schnellste Weg mit bordeigenen T-SQL Mitteln zu sein.:-)
Ueber wie viele Datensätze in table1 reden wir?
Enthält table2 bereits Daten und wenn Ja, wie viele?
Ist das ein regelmässiger Prozess?
-- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org -
Hallo briquet,
Unter der Voraussetzung, dass das Tabellendesign von beiden Identisch ist, keine FK's und in der Zieltabelle keine Daten vorhanden sind, kannst Du die ALTER TABLE SWITCH PARTITION Anweisung verwenden; dabei werden nur die Zeiger auf die Datenseiten "umgebogen", selbst bei Millionen von Datensätzen funktioniert das in Sekunden. Und auch wenn die Anweisung eigentlich zu der Enterprise-Edition vorbehaltenen Partitioning Funktionalität gehört, das funktioniert sogar bei der Express Edition (gerade extra noch mal getestet).
Beispiel siehe: Massendaten zwischen Tabellen schieben
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing -
Meine erste Tabelle ist nur eine Tabelle in die Datensätze aus einer Datei importiert werden. Diese werden dort aufbereitet. Die zweite Tabelle entspricht dem Konzept des DWH. Sie wird also ständig wachsen. Deswegen wollte ich schon von anfang an den Kopiervorgang skalierbar gestalten.
-
Meine erste Tabelle ist nur eine Tabelle in die Datensätze aus einer Datei importiert werden. Diese werden dort aufbereitet. Die zweite Tabelle entspricht dem Konzept des DWH. Sie wird also ständig wachsen. Deswegen wollte ich schon von anfang an den Kopiervorgang skalierbar gestalten.
Und beide Tabellen liegen in der gleichen Datenbank auf dem gleichen Server? Wenn die Daten sowieso aus einer Datei importiert werden, warum willst Du die zuerst in eine Tabelle laden, um sie anschliessend in die endgültige Zieltabelle zu verschieben? Vielleicht solltest Du daraus einen ETL Prozess machen und Dich mit SSIS vertraut machen? Dort gibt es diverse Optionen und Tweaks, um einen Load "so schnell wie möglich" zu machen.
-- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org