MySQL按年龄水平分区

标签 mysql partitioning

在我的 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/

相关文章:

sql - 在Impala/Hive中删除多个分区

sql-server-2012 - 对海量数据进行分区和处理 SSAS 多维数据集

php - 我如何自动化 EXCEL 工作表、Mysql 和 XML 交互

MySQL内部连接多列

开放时间

php - 无法找到由 OUTFILE 创建的文件

apache - 为什么配置单元中的桶数应等于 reducer 数?

mysql - 支持 LIST COLUMNS 分区的 MySQL 最低版本

postgresql - Postgres 10.3 严重分区表,无法删除任何记录

MySQL日期子查询和跨两行的唯一性