每天分割桌子的最佳方式

时间:2015-09-22 02:43:51

标签: mysql

我每天都有一个收集大量虚拟机群集统计信息的表格,我希望每天在以创建日期命名的表中存放旧统计信息,以提高查询性能。

我想到的两种可能方式:

    • 每天00:00,将表格stat_cpu重命名为stat_cpu_(yesterday date)
    • 创建stat_cpu
  1. 专业人士:高效

    缺点:在此过程中插入数据,需要重写应用程序以防止插入失败。

      • 每天00:00,创建stat_cpu_(yesterday date)
      • 将昨天的数据移至stat_cpu_(yesterday date)
    1. 专业人士:应用程序不需要更改

      缺点:巨大的数据传输

      哪种方式更好?或者有更好的方法来做到这一点吗?

1 个答案:

答案 0 :(得分:0)

你应该结合我的方法

CREATE TABLE `stat_cpu_last_day` LIKE `stat_cpu`;

INSERT INTO `stat_cpu_last_day` (
    SELECT * FROM `stat_cpu`
);

RENAME TABLE
    `stat_cpu_last_day` TO `ghost_table`,
    `stat_cpu` TO `stat_cpu_last_day`,
    `ghost_table` TO `stat_cpu`
;

如果您这样做,在此过程中插入的数据不会丢失。

因为只有放在这里它可以发生它的RENAME查询它的快速并锁定它使用的表。

你不需要重写你的应用程序。

关于INSERT查询中的大量数据传输...很多索引? (你可以在插入之前删除它们)无论如何都会很快。但即便如此。

应安排此操作