mysql数据库自动分区
Posted
技术标签:
【中文标题】mysql数据库自动分区【英文标题】:mysql database automatic partitioning 【发布时间】:2011-01-11 13:26:19 【问题描述】:我有一个 mysql 数据库表,我想按日期分区,特别是按月和年。但是,当为新的月份添加新数据时,我不想手动更新数据库。
当我最初创建数据库时,我有 11 月 9 日、12 月 9 日、1 月 10 日等的数据。现在,当 2 月开始时,我希望自动创建 2 月 10 日的分区。这可能吗?
【问题讨论】:
我不确定这是否是最好的主意。每次更改分区时,基本上都会重写整个表。这可能需要相当多的时间和资源。 @Mchl 如果您有更好的想法,我会很高兴听到它。你是对的,它非常密集(比我想要的还要多),但如果它每月只运行一次,那也不算太糟糕——尤其是当我需要进行常规查询时,比如“选择上个月的第 3 天”。 “每次更改分区时,基本上都会重写整个表”:完全不是这样。添加分区或删除分区就像创建/删除表。基本上是即时的。仅修改 其中已有数据 的现有分区可能会很慢。因此,如果您在插入数据之前为下个月创建一个新分区,那将非常快。 【参考方案1】:那里有一些解决方案,如果您想要一个完整的解决方案,请查看post out on kickingtyres。它是处理分区分析和创建的存储过程的基本组合(带有一些日志记录!)。
您需要做的就是将其调整为您的分区类型(示例使用 bigint 分区)并使用 MySQL Event Scheduler 安排程序运行。
【讨论】:
我喜欢用于分区创建的存储过程的概念。 kickingtyres 链接已损坏。 死链接没有帮助。【参考方案2】:我会做别人做的事(发布链接)Quick Introdunction to MySQL Partitioning
(查看第 50 页了解您需要的内容 - 按日期划分)
编辑:我更仔细地重新阅读了您的帖子-如果您想按月更改分区,为什么不创建一个 Mysql event
这样做
【讨论】:
我是个建议。但我认为你最终会得到一个事件和一个存储过程来做你想做的事。【参考方案3】:是的,您可能会喜欢 5.5 中增强的分区功能:
http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html
【讨论】:
我是否需要每个月设置一个触发器来为该月添加一个新分区?因为我不想提前定义所有月/年... @Jeff - 我不这么认为,反正在那篇文章中没有任何说明。这些都是很棒的增强功能,但不能解决您当前的问题......我在 SQL Server 最初添加分区时也遇到过,当然是 PITA。 @Nick Craver。您发布的文章具有执行此操作的存储过程。我想我可以使用每月触发器(或 cron 作业,详细信息待定)通过存储过程添加新分区。谢谢。 链接失效以上是关于mysql数据库自动分区的主要内容,如果未能解决你的问题,请参考以下文章