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

DELETE-Befehl ist in einer Tabelle mit gruppiertem Index zu langsam

Es kann langsam sein, da ein großer Löschvorgang ein großes Transaktionsprotokoll generiert. Versuchen Sie, es in Blöcken zu löschen, wie:

WHILE 1 = 1
BEGIN
    DELETE TOP (256) FROM FTPLog WHERE FTPLogId <= @MaxFTPLogId
    IF @@ROWCOUNT = 0
        BREAK
END

Dadurch werden kleinere Transaktionen generiert. Und es mindert Sperrprobleme, indem es Platz zum Atmen für andere Prozesse schafft.

Sie können sich auch partitionierte Tabellen ansehen . Diese ermöglichen es Ihnen möglicherweise, alte Einträge zu löschen, indem Sie eine ganze Partition löschen.