2012-04-26 95 views
0

我想分区我的表。 表是:没有唯一字段的mysql分区

create_table "multimedia", :force => true do |t|  
    t.integer "id" 
    t. binary "data"  
    t.integer "device_id"   
    t.datetime "created_at"     
end 

id是主键
created_at是表的简单索引并没有独特

我需要由现场created_at对表进行分区。在我的桌子里只有最近7天的记录,所以我想在一天之内进行分区。我写这篇文章COSE:

partition by range (to_days(created_at))   

    (PARTITION p20120417 VALUES LESS THAN (to_days('2012-04-17 23:59:59 +0200')),     
    PARTITION p20120418 VALUES LESS THAN (to_days('2012-04-18 23:59:59 +0200')),     
    PARTITION p20120419 VALUES LESS THAN (to_days('2012-04-19 23:59:59 +0200')),    
    PARTITION p20120420 VALUES LESS THAN (to_days('2012-04-20 23:59:59 +0200')),    
    PARTITION p20120421 VALUES LESS THAN (to_days('2012-04-21 23:59:59 +0200')),    
    PARTITION p20120422 VALUES LESS THAN (to_days('2012-04-22 23:59:59 +0200')),     
    PARTITION p20120423 VALUES LESS THAN (to_days('2012-04-23 23:59:59 +0200')),      
    PARTITION p20120424 VALUES LESS THAN (to_days('2012-04-24 23:59:59 +0200'))     
); 

代码给我这个错误:

A PRIMARY KEY must included all columns in the table's partitioning function

我需要的表分区只有created_at,它不能是唯一的。

我该怎么办?

+0

欢迎来到Stack Overflow。您可以使用工具栏按钮格式化源代码块(或向所有行添加4个字符的缩进)。这次我为你做了。 – 2012-04-26 10:36:15

回答

0

使您的主键(id,created_at),因为id是唯一的,这是保证是唯一的。您可以使用created_at作为表分区标准。

相关问题