Wahrscheinlich ist es in einigen hochvolumigen OLTP-Datenbanken besser, Daten überhaupt nicht zu löschen. Entwickler können das Feld "IsDeleted" oder ähnliches erstellen. Dies ist jedoch eine Überlegung für die Zukunft.
Als Antwort haben Sie akzeptiert. Ich glaube nicht, dass es schneller funktioniert als der einfache DELETE-Ansatz, wenn Sie 100 MB Daten kopieren. Es wird eine sehr hohe Last und ein großes Wachstum des Transaktionsprotokolls sein. Im Allgemeinen hängt es davon ab, wie viele dieser Daten Sie nach Abschluss des Löschvorgangs unberührt lassen möchten.
Was ich empfehlen würde ist
1) Wenn Sie Ihre Abfrage in nicht aktiven Stunden ausführen können, sollten Sie eine exklusive Tabellensperre ausstellen und dann Datensätze löschen. Dies spart Zeit, die SQL Server für die Weitergabe von Sperren an viele einzelne Zeilen benötigt
2) Wenn der erste Ansatz nicht möglich ist, dann löschen Sie ihn nach Brocken. Ich werde John Sansom zustimmen. Probleme beginnen, wenn es eine sehr große Transaktion gibt, die viele Transaktionen anderer aktiver Benutzer blockiert ... Sie müssen also in kleinen Teilen löschen, jede in ihrer eigenen Transaktion ...
3) Sie können auch vor / nach dem Löschen vorübergehend Trigger und Einschränkungen (einschließlich Fremdschlüssel) ausschalten (oder löschen und dann neu erstellen). Es besteht jedoch ein Integritätsrisiko, und dieser Ansatz erfordert einige Experimente.
AFAIK: Das Deaktivieren / Aktivieren von Indizes verbessert die Situation nicht, da beim Löschen von Datensätzen "Lücken" in den Indexbäumen auftreten. Dies kann sich also auf die Leistung der nächsten SQL-Abfragen für dieselbe Tabelle und früher oder später auf Sie auswirken Möglicherweise möchten Sie die Indizes neu erstellen, ich sehe jedoch keine Auswirkungen darauf, wie Indizes (auch wenn Sie möglicherweise auch Indizes haben) die Geschwindigkeit des Löschvorgangs verringern können
In den meisten Fällen ist die Leistung von DELETE schlecht, wenn Indizes nicht von der DELETE-Abfrage verwendet werden (Sie können den Abfrageplan überprüfen) oder wenn Sie zu viele Fremdschlüssel oder eine starke Triggerlogik haben.