没有唯一字段的mysql分区

时间:2012-04-26 10:33:44

标签: mysql database-partitioning

我想分区我的桌子。 表是:

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'))                
);  

代码给我这个错误:

  

PRIMARY KEY必须包含表格分区中的所有列   功能

我需要表格仅由created_at分区,并且它不能是唯一的。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

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