按年龄划分的MySQL水平分区

时间:2012-06-19 17:38:45

标签: mysql partitioning

在我的MySQL数据库表中,我们的前端用户仅使用最近两周的记录。任何早于此的数据仅供管理部门使用。

我想要做的是通过根据数据库中记录的年龄横向配置数据库来优化前端用户的性能。

因此前端需要一个分区,它只包含过去两周的记录,另一个分区包含任何超过2周的记录。

但是,我没有在MySQL文档(here)中看到是否可以这样做。

有人可以告诉我这是否可以完成以及表格的创建声明可能看起来如何?

1 个答案:

答案 0 :(得分:-1)

好的,对于双表解决方案,union sql看起来像这样:

管理员用户将使用:

select
  id,
  column1,
  column2,
  age
from
  oldrecs

union

select
  id,
  column1,
  column2,
  age
from
  newrecs

order by
  age

这是一个查询,将返回单个结果集。请注意,选择块具有相同的字段数和类型。在您的情况下,两个表将具有相同的布局。

同时,您的网站用户只会使用该查询的最后一部分:

select
  id,
  column1,
  column2,
  age
from
  newrecs
order by
  age

除此之外,您还需要一个cron作业来将旧记录从newrecs表移动到oldrecs表。

  insert into oldrecs
  select
    id,
    column1,
    column2,
    age
  from
    newrecs
  where
    age < date(now()) - interval 7 days;

  delete from
    newrecs
  where
    age < date(now()) - interval 7 days;