Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Löschanweisung in SQL ist sehr langsam

Dinge, die dazu führen können, dass ein Löschvorgang langsam ist:

  • Viele Datensätze löschen
  • viele Indizes
  • fehlende Indizes für Fremdschlüssel in untergeordneten Tabellen. (Danke an @CesarAlvaradoDiaz für die Erwähnung in den Kommentaren)
  • Deadlocks und Blockierungen
  • Auslöser
  • Kaskadenlöschung (diese zehn übergeordneten Datensätze, die Sie löschen, könnten bedeuten, dass Millionen von untergeordneten Datensätzen gelöscht werden)
  • Transaktionsprotokoll muss wachsen
  • Viele zu prüfende Fremdschlüssel

Sie haben also die Wahl, herauszufinden, was blockiert, und es zu beheben, oder die Löschvorgänge außerhalb der Geschäftszeiten auszuführen, wenn sie die normale Produktionslast nicht beeinträchtigen. Sie können das Löschen in Stapeln ausführen (nützlich, wenn Sie Trigger, Kaskadenlöschung oder eine große Anzahl von Datensätzen haben). Sie können die Indizes löschen und neu erstellen (am besten, wenn Sie das auch außerhalb der Geschäftszeiten tun können).