【问题标题】:Mysql 5.5 autocreate monthly partitionMysql 5.5 自动创建每月分区
【发布时间】:2014-05-14 03:52:07
【问题描述】:

我有一个数据库表,每天插入大约 10k 行。数据库中已经有 10m+ 条记录。我想知道如何每月在这张表上自动创建分区,以便我可以更快地获取数据。

对于在表上创建的分区数量也有任何限制。

例如。

  • 2000 年 12 个分区
  • 2001 年的 12 个分区等等...

分区应该在每个月初自动创建。

我的方案中有日期列。

【问题讨论】:

  • 也许是时候研究一下大数据数据存储/数据库了?
  • 但是如果我想对表进行分区怎么办,因为我有其他数据库也与之链接。
  • 我假设您需要一个每月创建一个新分区的 cron 脚本。我根本不是分区专家,但如果你不喜欢 google,这个页面看起来很有用 (dev.mysql.com/doc/refman/5.5/en/partitioning.html)

标签: mysql partitioning


【解决方案1】:

不,您必须自己定期运行ALTER TABLE 来添加分区。 MySQL 没有自动添加分区以响应数据增长的功能。但是你当然可以创建一个 cron 作业来完成它。或者您也可以使用MySQL EVENT。

MySQL 5.5 允许每个表最多 1024 个分区,而 MySQL 5.6 将其增加到每个表最多 8192 个分区。因此,如果您每年创建 12 个分区,您可以存储至少 85 年的数据。

但是请注意,分区并不是让所有查询更快的神奇解决方案。仅当优化器可以根据您的查询条件修剪检查的分区时,分区才有帮助。例如,如果您按日期进行分区,但随后对特定用户的所有行运行查询而不考虑日期,则无论如何查询都必须检查所有分区,因为给定用户的行可能存在于任何月份。

以每天 10k 行的增长速度,您的表将以每年 3,650,000 的速度增长。这当然是相当快速的增长,但并非无法处理。

我在一些具有数亿行的数据库上工作,没有使用分区。分区是优化某些查询的一种方法,但索引更灵活。

【讨论】:

  • 非常有用,谢谢!我已经创建了超过 3 个字段的索引。 fund_code,scheme_code and date。仍然搜索平均需要 15-20 秒,我认为对于更大的获取它可以更高。此外,更新您的搜索将仅在索引字段上。如果我使用 cron 作业,告诉我每次都会重写整个表吗?我也可以一起制作未来的分区,这对我有帮助吗?
  • 您可以有效地将一个分区拆分为多个分区,这将是使用 RANGE 分区扩展表的一种典型方式。您应该阅读documentation on partitioning。
猜你喜欢
  • 2015-11-02
  • 2017-11-18
  • 2018-02-27
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
相关资源
最近更新 更多