如何在此表上使用MySQL表分区?

时间:2009-12-03 03:25:06

标签: mysql partitioning

我有一张表基本上是这样的:

CREATE TABLE myTable (
    id INT auto_increment,
    field1 TINYINT,
    field2 CHAR(2),
    field3 INT,
    theDate DATE,
    otherStuff VARCHAR(20)
    PRIMARY KEY (id)
    UNIQUE KEY (field1, field2, field3)
)

我想根据theDate的月份和年份对表格进行分区,但是the manual告诉我我不被允许:

  

分区表的分区表达式中使用的所有列必须是表可能具有的每个唯一键的一部分。换句话说,表中的每个唯一键必须使用表的分区表达式

中的每一列

我有什么选择?我还可以对桌子进行分区吗?

3 个答案:

答案 0 :(得分:3)

我在这里写了一篇关于这个问题的博客文章Scaling Rails with MySQL table partitioning(rails使用整数PK)。相同的技术应该适用于您的情况,但不幸的是,您必须删除[field1,field2,field3]唯一键。

删除一个唯一的密钥也是我处理的一个问题(尽管帖子中没有提到)。我在创建记录之前通过实施存在检查来解决这个问题,意识到由于竞争条件,我们仍然会偶尔遭遇欺骗。在实践中,这并不是一个问题。然而,增加的查询吞吐量需要扩大innodb缓冲区大小'因为我们的i / o是残酷的。

答案 1 :(得分:0)

不,不是现在的形式。

您可以删除主键,而只是将“id”设为普通索引。辅助唯一索引仍然是一个问题,您需要删除它或更改分区方案以涉及日期列。

答案 2 :(得分:0)

如果您根据日期时间列的年份和月份进行分区,您是否考虑过为每个月组合使用一个表格,然后使用merge table?我知道这并没有直接回答你的问题,但认为这可能会有所帮助...