Kürzlich fragte mich ein Freund, er sagte, dass es für ihn sehr langsam sei, Millionen bis Dutzende Millionen Daten in SQLSERVER zu löschen. Ich habe ihm bei der Analyse geholfen und einige Vorschläge gemacht, die für viele Menschen nützlich sein könnten, und das ist es auch Auch sehr lange habe ich noch keinen Blog geschrieben. Lassen Sie uns das gemeinsam besprechen.
Wenn Ihr Festplattenspeicher klein ist und Sie das Datenbankprotokoll nicht auf das Minimum setzen möchten (weil Sie möchten, dass andere normale Protokolle weiterhin vorhanden sind). aufgezeichnet) und Sie relativ hohe Geschwindigkeitsanforderungen haben und alle Daten löschen, empfehle ich Ihnen, turncate table1 zu verwenden, da es sich bei truncate um eine DDL-Operation handelt, die kein Rollback generiert und schneller ist, wenn keine Protokolle geschrieben werden Wenn es sich um eine automatische Inkrementierung handelt, wird sie auf 1 wiederhergestellt. Wenn Sie eine Tabelle mit einer großen Datenmenge löschen, ist die Geschwindigkeit sehr langsam und es werden viele Rollback-Segmente belegt Protokolle auf G-Ebene aufzeichnen. Was ist, wenn es bedingte Löschvorgänge gibt, z. B. „Where time<‘2006-3-10‘? Kann ich „Delete“ ohne Protokollierung verwenden? Operationen. Bisher gibt es keine Möglichkeit, zu erzwingen, dass bestimmte Anweisungen nicht im Protokoll aufgezeichnet werden. Wenn „Delete Table1 where Time < „2006-3-10““ ausgeführt wird, ist der Protokolldatensatz sehr groß (3-4G), da es viele gibt Wenn möglich, schlage ich die folgende Methode vor:
Wählen Sie die Datensätze aus, die Sie in einer neuen Tabelle aufbewahren möchten. Wenn Sie den vollständigen Wiederherstellungsmodus verwenden
Abhängig von der Anzahl der SELECT INTO-Datensätze kann das Protokoll größer sein.
Wählen Sie * in Tabelle2 aus Tabelle1 aus, wobei Zeit > = '2006-03-10' ist,
und schneiden Sie dann Tabelle1 direkt ab. Unabhängig vom Wiederherstellungsmodell findet keine Protokollierung statt
Schneiden Sie die Tabelle Table1 ab
und benennen Sie schließlich Table2 in Table1 um
EC sp_rename 'Table2', 'Table1'
Quelle: BLOG: Dominos Spalte