Tôi có bảng MYSQL chỉ yêu cầu dữ liệu tối đa 30 ngày trước ngày đến ngày. Nó có dữ liệu có thể tối đa một vài năm sau ngày hôm nay. Để truy vấn nhanh hơn, tôi thường xóa các bản ghi cũ vì tôi không thấy điểm tìm kiếm thông qua các bản ghi cũ. Tuy nhiên, tôi vẫn duy trì một bản sao lưu các bản ghi nếu chúng tôi cần nó để phân tích. Bảng ban đầu là thế này:Xóa bản ghi cũ khỏi bảng mysql nhưng vẫn giữ bản sao lưu
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)
)
Và tôi có thể tạo một bảng mà là một bản sao của bảng này được gọi là lịch sử:
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)
)
Tôi có một kích hoạt để cư bảng lịch sử bất cứ khi nào một chèn xảy ra trên bảng gốc:
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)
Cuối cùng, tôi lau bảng bằng cách sử dụng một công việc định kỳ và lệnh:
DELETE * FROM featured_deal WHERE bookedDate < DATE_SUB(CURDATE(), INTERVAL 30 DAY)
Có cách nào tốt hơn để thực hiện tác vụ trên không? Tôi nghĩ về phân vùng MYSQL. Tuy nhiên, tôi không có một phân vùng cố định. Ngày thay đổi và do đó tôi cần hai phân vùng mới mỗi ngày.
Tôi thực sự đã xóa id mới khỏi bảng lịch sử vì nó không phục vụ mục đích. –