Mysql 表数据处理-最佳使用

Mysql 表数据处理-最佳使用,mysql,Mysql,我有一个mysql中有800万条记录的表 我想保留上一周的数据并删除其余的数据,我可以进行转储并在另一个模式中重新创建表 我正在努力获得正确的查询,请分享您的观点和最好的方法。最好的删除方法,这样就不会影响生产中的其他表 谢谢。MySQL为您提供了一种称为分区的功能。您可以进行水平分区并按行分割表。800万不是那么多,每周的插入率是多少 CREATE TABLE MyVeryLargeTable ( id SERIAL PRIMARY KEY, my_date DATE -- your othe

我有一个mysql中有800万条记录的表

  • 我想保留上一周的数据并删除其余的数据,我可以进行转储并在另一个模式中重新创建表

  • 我正在努力获得正确的查询,请分享您的观点和最好的方法。最好的删除方法,这样就不会影响生产中的其他表


  • 谢谢。

    MySQL为您提供了一种称为分区的功能。您可以进行水平分区并按行分割表。800万不是那么多,每周的插入率是多少

    CREATE TABLE MyVeryLargeTable (
    id SERIAL PRIMARY KEY,
    my_date DATE
    -- your other columns
    ) PARTITION BY HASH (YEARWEEK(my_date)) PARTITIONS 4;
    
    您可以在此处阅读更多信息:

    编辑:这一个创建4个分区,所以这将持续4周-因此我建议更改为基于月/年的分区。分区限制相当高,但这确实是一个每周/每月/年的插入率如何的问题

    编辑2


    MySQL5.0附带了一个归档引擎,您应该将其用于归档表()。现在,如何将数据放入归档表?似乎您必须编写一个在每周开始时运行的cron作业,将所有记录移动到归档表并从原始记录中删除它们。您可以为此编写存储过程,但cron作业需要在shell上运行。请记住,这可能会以某种方式影响数据完整性。升级到MySQL 5.1怎么样?

    每天将插入40K条记录,我想维护最近一周的数据并移动其余的。@sled-谢谢,但我的数据库没有分区支持。不能通过查询完成吗?嗨,分区限制是1024,所以这可能会持续19年(注意限制)。这将使您的所有记录保持在同一个表中,但mysql将在内部“归档”旧记录,这使得查询新记录更快。您好,您使用的是什么版本的mysql和引擎?5.0,我想我可以使用一些查询来完成这项工作。