在我的MySQL数据库表中,前端用户只使用最近两周的记录。任何早于此日期的数据仅供管理使用。
我想做的是根据数据库中记录的年龄对数据库进行水平分区,从而优化前端用户的性能。
因此,前端需要一个分区,其中一个分区只包含过去两周的记录,另一个分区需要包含任何超过2周的记录。
但是,我没有在MySQL文档(here)中看到这是否可以做到。
有人能告诉我这是否可以实现,表的create语句看起来可能是什么样子?
发布于 2012-08-28 19:01:58
好的,对于两个表的解决方案,联合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;https://stackoverflow.com/questions/11106350
复制相似问题