MySQL移动或存档未使用的数据

时间:2017-12-28 09:45:02

标签: mysql

所以我有合适的交易大小表。我无法重新设计它或添加更多索引。数据原样。无论如何,一半的业务逻辑都进行全面扫描。 我想知道将一些旧/未使用的数据移到'存档表'加快一点东西,并且能够偶尔扫描所有数据。或者其他方向:创建快餐桌'我将只有新鲜的(上个月左右)数据,以及包含所有数据的普通表。

有人知道这种技术还是其他什么?在哪里阅读?更好的方法?如何在代码中实现。

目前,我们有大约50万行数据,其中包含疯狂的分区,这些数据使用起来更加危害。

PARTITION BY LIST (user_id%20)
SUBPARTITION BY KEY (user_role)
SUBPARTITIONS 4
(PARTITION p0 VALUES IN (0) ENGINE = InnoDB,
 PARTITION p1 VALUES IN (1) ENGINE = InnoDB,
 PARTITION p2 VALUES IN (2) ENGINE = InnoDB,
 PARTITION p3 VALUES IN (3) ENGINE = InnoDB,
 PARTITION p4 VALUES IN (4) ENGINE = InnoDB,
 PARTITION p5 VALUES IN (5) ENGINE = InnoDB,
 PARTITION p6 VALUES IN (6) ENGINE = InnoDB,
 PARTITION p7 VALUES IN (7) ENGINE = InnoDB,
 PARTITION p8 VALUES IN (8) ENGINE = InnoDB,
 PARTITION p9 VALUES IN (9) ENGINE = InnoDB,
 PARTITION p10 VALUES IN (10) ENGINE = InnoDB,
 PARTITION p11 VALUES IN (11) ENGINE = InnoDB,
 PARTITION p12 VALUES IN (12) ENGINE = InnoDB,
 PARTITION p13 VALUES IN (13) ENGINE = InnoDB,
 PARTITION p14 VALUES IN (14) ENGINE = InnoDB,
 PARTITION p15 VALUES IN (15) ENGINE = InnoDB,
 PARTITION p16 VALUES IN (16) ENGINE = InnoDB,
 PARTITION p17 VALUES IN (17) ENGINE = InnoDB,
 PARTITION p18 VALUES IN (18) ENGINE = InnoDB,
 PARTITION p19 VALUES IN (19) ENGINE = InnoDB)

每个uniq user_id有3个不同的user_role和大约20行。不要问我到底是什么,它只是它是什么......

谢谢。

PS:我绝对明白,最好花时间来全面分析和重新设计餐桌本身,但有时候,在食物链中高于你的政治和简单肮脏的人是不可能的。

1 个答案:

答案 0 :(得分:0)

您可能需要查看Table Partitioning ,特别是Range Partitioning:

如果您按日期列/时间戳分区表,则Mysql将在查询期间仅扫描相应的分区:

  

您经常运行直接依赖于用于对表进行分区的列的查询。例如,当执行诸如EXPLAIN PARTITIONS之类的查询时,SELECT COUNT(*)FROM employees WHERE分隔BETWEEN' 2000-01-01' AND' 2000-12-31' GROUP BY store_id;,MySQL可以快速确定只需要扫描分区p2,因为其余分区不能包含满足WHERE子句的任何记录。