今日の日付の 30 日前までのデータのみを必要とする MYSQL テーブルがあります。今日の日付から数年後までのデータがあります。クエリを高速化するために、古いレコードを検索しても意味がないので、通常は古いレコードを削除します。ただし、分析のために必要になった場合に備えて、記録のバックアップ コピーを保持しています。元のテーブルは次のとおりです。
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)
)
そして、履歴と呼ばれるこのテーブルのレプリカであるテーブルを作成します。
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)
)
元のテーブルで挿入が発生するたびに、履歴テーブルにデータを入力するトリガーがあります。
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)
最後に、cron ジョブとコマンドを使用してテーブルをクリーンアップします。
DELETE * FROM featured_deal WHERE bookedDate < DATE_SUB(CURDATE(), INTERVAL 30 DAY)
上記のタスクを実行するためのより良い方法はありますか? MYSQL パーティションについて考えました。ただし、固定パーティションはありません。日付が変わるため、毎日 2 つの新しいパーティションが必要になります。