我在mysql中有一个包含8百万条记录的表。
我想保留最后一周的数据并删除其余数据,我可以转储并在另一个模式中重新创建表。
我正在努力使查询正确,请分享您的观点和最佳方法来执行此操作。最佳删除方式,以便它不会影响生产中的其他表格。
感谢。
答案 0 :(得分:0)
MySQL为您提供了一种称为分区的功能。您可以执行水平分区并按行拆分表。 800万不是那么多,每周的插入率怎么样?
CREATE TABLE MyVeryLargeTable (
id SERIAL PRIMARY KEY,
my_date DATE
-- your other columns
) PARTITION BY HASH (YEARWEEK(my_date)) PARTITIONS 4;
您可以在此处详细了解:http://dev.mysql.com/doc/refman/5.1/en/partitioning.html
编辑:这个创建了4个分区,因此这将持续4周 - 因此我建议根据月/年更改为分区。分区限制相当高,但这实际上是一个问题,即每周/每月/每年的插入率如何。
修改2
MySQL5.0附带一个归档引擎,你应该将它用于你的归档表(http://dev.mysql.com/tech-resources/articles/storage-engine.html)。现在如何将您的数据存入存档表?看起来你必须编写一个在每周开始时运行的cron-job,将所有记录移动到存档表并从原始表中删除它们。您可以为此编写存储过程,但cron-job需要在shell上运行。请记住,这可能会以某种方式影响您的数据完整性。升级到MySQL 5.1怎么样?