Ich habe eine MYSQL-Tabelle, die nur Daten bis zu 30 Tage vor dem heutigen Datum benötigt. Es hat Daten, die bis zu ein paar Jahren nach dem heutigen Datum sein können. Für eine schnellere Abfrage lösche ich normalerweise die alten Datensätze, da ich keinen Sinn darin sehe, die alten Datensätze zu durchsuchen. Ich verwalte jedoch immer noch eine Sicherungskopie der Datensätze, wenn wir sie jemals für Analysen benötigen. Die Original-Tabelle ist dies:Löschen alter Datensätze aus einer MySQL-Tabelle, aber ein Backup beibehalten
CREATE TABLE featured_deal (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
fsa VARCHAR(10),
poster_id int(11),
dealid bigint(20),
bookedDate date,
createDate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY `featured_unique`(fsa, bookedDate)
)
Und ich erstellen Sie eine Tabelle, die eine Nachbildung dieser Tabelle ist Geschichte genannt:
CREATE TABLE featured_deal_history (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
fsa VARCHAR(10),
poster_id int(11),
dealid bigint(20),
bookedDate date,
createDate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY `featured_unique`(fsa, bookedDate)
)
Ich habe einen Trigger, um die Geschichte Tabelle zu füllen, wenn ein Einsatz auf das geschieht Original-Tabelle:
CREATE TRIGGER `featured_to_history`
AFTER INSERT ON lst_enmasse_featured_deal
FOR EACH ROW
INSERT INTO lst_enmasse_featured_deal_history (fsa,poster_id,dealid,bookedDate,createDate)
VALUES (NEW.fsa,NEW.poster_id,NEW.dealid,NEW.bookedDate,NEW.createDate)
Schließlich reinige ich die Tabelle einen cron-Job verwenden und den Befehl:
DELETE * FROM featured_deal WHERE bookedDate < DATE_SUB(CURDATE(), INTERVAL 30 DAY)
Gibt es einen besseren Weg, die obige Aufgabe zu erfüllen? Ich habe über MYSQL Partitions nachgedacht. Ich habe jedoch keine feste Partition. Das Datum ändert sich und daher würde ich jeden Tag zwei neue Partitionen brauchen.
Ich entfernte tatsächlich die neue ID aus der Verlaufstabelle, da sie keinen Zweck erfüllte. –