RT,用的5.5.28版本,想实现根据表中类别字段的值来动态分区,如:
CREATE TABLE `data_log` (
  `uniqueid` varchar(20) NOT NULL,
  `cam_id` varchar(8) default NULL,
  `call_date` datetime default NULL, 
  `status` varchar(6) default NULL, 
  PRIMARY KEY  (`uniqueid`), 
  KEY `call_date` (`call_date`),
  KEY `cam_id` (`cam_id`),
  KEY `status` (`status`) 
 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;insert into data_log values
('100001','cam1','2012-11-14 08:19:40','A'),('100002','cam1','2012-11-14 08:19:40','B'),('100003','cam1','2012-11-15 08:19:40','C')
,('100004','cam1','2012-11-15 08:19:40','D'),('100005','cam2','2012-11-14 08:19:40','A'),('100006','cam2','2012-11-14 08:19:40','A')
,('100007','cam2','2012-11-15 08:19:40','B'),('100008','cam2','2012-11-15 08:19:40','C'),('100009','cam1','2012-11-14 08:19:40','A'),
('100010','cam1','2012-11-15 08:19:40','B'),('100011','cam2','2012-11-15 08:19:40','A'),('100012','cam2','2012-11-14 08:19:40','C'),
('100013','cam1','2012-11-15 08:19:40','A'),('100014','cam2','2012-11-15 08:19:40','D'),('100015','cam1','2012-11-14 08:19:40','D'),
('100016','cam3','2012-11-14 08:19:40','A'),('100017','cam3','2012-11-14 08:19:40','D'),('100018','cam3','2012-11-15 08:19:40','D'),
('100019','cam3','2012-11-15 08:19:40','C'),('100020','cam3','2012-11-14 08:19:40','A'),('100021','cam2','2012-11-14 08:19:40','B'),
('100022','cam3','2012-11-15 08:19:40','B'),('100023','cam1','2012-11-14 08:19:40','C'),('100024','cam4','2012-11-14 08:19:40','A'),
('100025','cam4','2012-11-15 08:19:40','B'),('100026','cam4','2012-11-15 08:19:40','B'),('100027','cam4','2012-11-15 08:19:40','C')能实现按status值来动态分区,而不是建表时候指定,以为这个status值是动态变化的。 能实现按 status、call_date 分月组合那更好不过了!

解决方案 »

  1.   

    PARTITION BY HASH(status) 
      

  2.   

    按楼上的该当用 HASH分区即可。但关键是你的查询以什么为准。 分区仅对某种特定查询有效。
      

  3.   

    有个疑惑啊,用hash分区的话,partition by hash(status)
    partitions 4;因为 status个数不是固定的,可能在后期的业务实施过程中,用户自己增加了一些值,这个 partitions 4;改怎么处理呢? alter table data_log partition by hash(status) partitions 5;   这样?
      

  4.   

    你可以一开始就 partitions 100
      

  5.   

    有个疑惑啊,用hash分区的话,partition by hash(status)
    partitions 4;因为 status个数不是固定的,可能在后期的业务实施过程中,用户自己增加了一些值,这个 partitions 4;改怎么处理呢? alter table data_log partition by hash(status) partitions 5;   这样?我对这个也有疑问,直接这样可以吗?会有影响吗?