在我的 MySQL 数据库表中,只有最近两周的记录被我们的前端用户使用。任何早于此的数据仅供管理使用。
我想做的是根据数据库中记录的年龄对数据库进行水平分区,从而为前端用户优化性能。
因此,前端需要制作的一个分区仅包含过去两周的记录,而另一个分区则包含两周前的所有记录。
但是,我没有在 MySQL 文档 ( here ) 中看到这是否可以完成。
有人可以建议这是否可以完成以及表的创建语句看起来如何?
最佳答案
好的,对于双表解决方案,联合 sql 看起来像这样:
管理员用户会使用:
select
id,
column1,
column2,
age
from
oldrecs
union
select
id,
column1,
column2,
age
from
newrecs
order by
age
这是一个单一的查询,将返回一个单一的结果集。请注意,选择 block 具有相同的字段数和类型。在您的情况下,两个表将具有相同的布局。
与此同时,您的网站用户只会使用该查询的最后一部分:
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;
关于MySQL按年龄水平分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106350/