none
schnelleres Insert RRS feed

  • 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.

    Donnerstag, 21. April 2011 06:39

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
    Donnerstag, 21. April 2011 06:51
  • 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
    Donnerstag, 21. April 2011 07:19
  • 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.
    Donnerstag, 21. April 2011 07:48
  • 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
    Donnerstag, 21. April 2011 09:54