Wir implementieren eine neue Funktion in unser System, mit der smallint
jede Nacht etwa eine Million Datensätze (jeder Datensatz ist winzig, im Grunde eine GUID, ein Datum und vier Felder) aus einer Tabelle gelöscht werden. Im Grunde ist es eine Caching-Tabelle, und sobald die Daten 7 Tage alt sind, tun wir Folgendes:
DELETE FROM scheduleCache WHERE schDateCreated < '2013-08-26
Dies wird jede Nacht um 1 Uhr morgens ausgeführt und jedes Mal, wenn es ausgeführt wird, werden etwa eine Million Datensätze gelöscht.
Gibt es etwas, das ich für einen Tisch wie diesen notieren oder tun sollte? Gibt es Eigenschaften, die ich auf den Tisch legen sollte, oder Routinen, die ich regelmäßig ausführen sollte, um "aufzuräumen"? Ich habe mich noch nie mit einem solchen Tisch befasst.
Die Tabelle hat einen einzelnen Clustered-Index (GUID + eines der smallint
Felder), und wir haben eine wöchentliche Indexwiederherstellung, die am Sonntagmorgen ausgeführt wird.
quelle
DELETE TOP 10000 WHILE COUNT() > 0
und es funktioniert seit mehreren Monaten hervorragend.Eine Lösung wäre, die Daten in einer Tabelle pro Tag zu speichern und die Tabellen zu löschen, wenn sie aus dem Cache altern. Die Tabellen hätten Namen wie cache_ (julian date).
Eine andere Lösung wäre, eine Reihe von Tabellen cache_0 bis cache_n zu haben, wobei jede Tabelle abgeschnitten wird, bevor Sie sie verwenden. Sie würden für jeden Tag den Tabellencache _ ((julianisches Datum) modulo (Zykluszeitraum)) verwenden.
Sie müssten das Jahresende sorgfältig behandeln, da Sie für beide Lösungen entweder von 365 oder 366 auf 0 wechseln.
quelle
create table
Erlaubnis