【问题标题】:Delete optimization using mysql partitioned table (MySQL 5.1)使用mysql分区表删除优化(MySQL 5.1)
【发布时间】:2012-01-11 19:13:24
【问题描述】:

我有一个每天晚上都会处理的日志表。将对昨天记录的数据进行处理。处理完成后,我想删除当天的数据。同时,我有当天的新数据进入表格。我根据星期几对表格进行了分区。我希望我可以同时删除数据和插入数据而不会发生争用。每天可能处理多达 300 万行数据。我已经搜索了信息,但没有找到任何可以证实我的假设的信息。
我不想像在其他示例中看到的那样编写添加分区和删除分区的作业的麻烦。我希望使用七个部分来实施解决方案。例如。

    CREATE TABLE `professional_scoring_log` (
      `professional_id` int(11) NOT NULL,
      `score_date` date NOT NULL,
      `scoring_category_attribute_id` int(11) NOT NULL,
      `displayable_score` decimal(7,3) NOT NULL,
      `created_at` datetime NOT NULL,
      PRIMARY KEY (`professional_id`,`score_date`,`scoring_category_attribute_id`),
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    /*!50100 PARTITION BY RANGE (DAYOFWEEK(`score_date`))
    (PARTITION Sun VALUES LESS THAN (2) ENGINE = InnoDB,
     PARTITION Mon VALUES LESS THAN (3) ENGINE = InnoDB,
     PARTITION Tue VALUES LESS THAN (4) ENGINE = InnoDB,
     PARTITION Wed VALUES LESS THAN (5) ENGINE = InnoDB,
     PARTITION Thu VALUES LESS THAN (6) ENGINE = InnoDB,
     PARTITION Fri VALUES LESS THAN (7) ENGINE = InnoDB,
     PARTITION Sat VALUES LESS THAN (8) ENGINE = InnoDB) */

当我处理昨天数据的工作完成后,它将删除 score_date = current_date-1 的所有记录。在任何时候,我可能只会将数据放在一两个分区中,具体取决于一天中的时间。

我的假设有什么漏洞吗?

【问题讨论】:

    标签: mysql sql-delete database-partitioning


    【解决方案1】:

    查理,我看不出你的逻辑/假设有任何漏洞。

    我想我的一条评论是为什么不使用删除/添加分区语法?它必须比 DELETE FROM .. Where .. 更有效;这只是两个调用——没什么大不了的——存储“原型”语句并根据一周中的每一天的需要替换“太阳”和“2”——我经常使用 sprintf 来做这件事

    ALTER TABLE `professional_scoring_log` DROP PARTITION Sun;
    
    
    ALTER TABLE `professional_scoring_log` ADD PARTITION (
        PARTITION Sun VALUES LESS THAN (2)
    );
    

    【讨论】:

    • 不做 ALTER TABLE 的原因更多是关于数据库权限和我们现有的流程和程序。我们不授予作业用户执行 DDL 命令的能力。授予单个表的删除权限比授予 ALTER 权限更容易接受。
    • 有道理——程序问题与其他任何事情一样都是我们现实的一部分——小心
    • 供将来参考,MySQL 5.5。引入了 TRUNCATE PARTITION,无需删除和添加分区。看这里(向下滚动一点):dev.mysql.com/tech-resources/articles/…
    猜你喜欢
    • 1970-01-01
    • 2014-01-09
    • 2010-12-31
    • 2016-10-06
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多