mysql 如何根据字段值如:类别ID,来动态分区?

「已注销」 2012-12-27 02:08:58
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 分月组合那更好不过了!
...全文
726 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
siz 2013-08-02
  • 打赏
  • 举报
回复
引用 3 楼 sea267 的回复:
[quote=引用 2 楼 ACMAIN_CHM 的回复:] 按楼上的该当用 HASH分区即可。但关键是你的查询以什么为准。 分区仅对某种特定查询有效。
有个疑惑啊,用hash分区的话,

partition by hash(status)
partitions 4;
因为 status个数不是固定的,可能在后期的业务实施过程中,用户自己增加了一些值,这个 partitions 4;改怎么处理呢?
alter table data_log partition by hash(status) partitions 5;   
这样?[/quote]我对这个也有疑问,直接这样可以吗?会有影响吗?
ACMAIN_CHM 2012-12-29
  • 打赏
  • 举报
回复
你可以一开始就 partitions 100
「已注销」 2012-12-29
  • 打赏
  • 举报
回复
引用 2 楼 ACMAIN_CHM 的回复:
按楼上的该当用 HASH分区即可。但关键是你的查询以什么为准。 分区仅对某种特定查询有效。
有个疑惑啊,用hash分区的话,

partition by hash(status)
partitions 4;
因为 status个数不是固定的,可能在后期的业务实施过程中,用户自己增加了一些值,这个 partitions 4;改怎么处理呢?
alter table data_log partition by hash(status) partitions 5;   
这样?
ACMAIN_CHM 2012-12-27
  • 打赏
  • 举报
回复
按楼上的该当用 HASH分区即可。但关键是你的查询以什么为准。 分区仅对某种特定查询有效。
rucypli 2012-12-27
  • 打赏
  • 举报
回复
PARTITION BY HASH(status)

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧