基于ID和Week的MySQL分区

基于ID和Week的MySQL分区,mysql,partitioning,Mysql,Partitioning,我有一张桌子 CREATE TABLE `acme`.`partitioned_table` ( `id` INT NULL, `client_id` INT NOT NULL, `create_datetime` INT NOT NULL, `some_val` VARCHAR(45) NULL); 我希望以这样一种方式对这个表进行分区:每个客户机的数据根据客户机id存储在自己的分区中,每个分区只能包含基于create_datetime的1周数据。这样,我们就可以根据每个客户

我有一张桌子

CREATE TABLE `acme`.`partitioned_table` (
  `id` INT NULL,
  `client_id` INT NOT NULL,
  `create_datetime` INT NOT NULL,
  `some_val` VARCHAR(45) NULL);
我希望以这样一种方式对这个表进行分区:每个客户机的数据根据客户机id存储在自己的分区中,每个分区只能包含基于create_datetime的1周数据。这样,我们就可以根据每个客户自己的保留策略每周删除一周的数据

例如,一些客户端希望有3个月的数据,而其他客户端可能有更长的数据保留策略

作为MySQL的新手,我很难想出一个合适的分区策略。如何根据INT列按周进行分区。要投掷曲线球,稍后可能会将其托管在AWS RDS上

非常感谢,


M

您的客户端x周级别的分区将导致大量分区。这意味着大量的磁盘空间和查询速度会变慢

您对“单独存储”的需求最好由单独的表或单独的数据库来处理

如果您还需要对所有客户机进行查询,我们需要进一步讨论

分区的“指导原则”之一是不要对少于一百万行的表进行分区

如果客户机的表足够大,可以进行分区,请参阅以获取更多讨论。如果不够大,则只需执行
删除操作
,或查看以下内容以了解更多选项:

如果您使用
INT
,则有许多
DATETIME
函数非常混乱:

`create_datetime` INT

与其实施复杂的分区方案,为什么不运行
delete
语句来清除客户端的历史记录?为什么要这样做?1)需要单独存储。2) 删除会产生重做日志并减慢数据库速度。删除一个分区效率更高。衷心感谢您的关注。我从不需要跨分区查询。磁盘空间不是问题。数据量无疑证明了分区的合理性。不能选择单独的表和/或数据库。我的问题仍然没有得到回答:-(非常感谢。您似乎要求进行
子分区
。这样做有一些限制,但请查看。