在我的 MySQL 数据库表中,我们的前端用户只使用最近两周的记录。任何比这更早的数据仅供管理使用。
我想做的是通过根据数据库中记录的年龄对数据库进行水平分区来优化前端用户的性能。
因此,前端将需要一个仅包含过去两周记录的分区和另一个分区以包含超过 2 周的任何记录。
但是,我没有在 MySQL 文档(此处)中看到是否可以这样做。
有人可以建议这是否可以完成以及表的创建语句可能看起来如何?
在我的 MySQL 数据库表中,我们的前端用户只使用最近两周的记录。任何比这更早的数据仅供管理使用。
我想做的是通过根据数据库中记录的年龄对数据库进行水平分区来优化前端用户的性能。
因此,前端将需要一个仅包含过去两周记录的分区和另一个分区以包含超过 2 周的任何记录。
但是,我没有在 MySQL 文档(此处)中看到是否可以这样做。
有人可以建议这是否可以完成以及表的创建语句可能看起来如何?
好的,对于两个表的解决方案,联合 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;