2014-08-30 75 views
0

我的表方案:如何通过列值“user_id”和“gps_time”对mysql进行分区?

CREATE TABLE `test_table` (
    `his_id` int(11) NOT NULL, 
    `user_id` varchar(45) NOT NULL, 
    `gps_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`his_id`,`user_id`) 
) 

欲通过USER_IDgps_time, 哪一列user_id说明分区这个表由第一字符A〜Z分配,A〜Z,0〜9, 列gps_time由tast 3个月(即:3个分区)分区。

该怎么办? 非常感谢〜

回答

0

对于MySQL 5.5,您可以使用多列与RANGE分区。

从你的问题,它不是完全清楚你想要多少分区;听起来好像你想要一大堆分区,但我不相信这就是你真正想要的。

RANGE分区的语法位于MySQL参考手册中,可在线获取。

这里:http://dev.mysql.com/doc/refman/5.5/en/partitioning.html

(请确保您检查手册的MySQL版本,你实际运行的;还有的是在5.0到分区一些显著的变化,5.1,5.5,等

用MySQL, 5.5.X,如果你想为USER_ID的第一个字符,以及一系列gps_time值的独立的分区,你可以做这样的事情:

PARTITION BY RANGE COLUMNS(userid, gps_time) 
(PARTITION pA0 VALUES LESS THAN ('B','2014-07-01') 
, PARTITION pA1 VALUES LESS THAN ('B','2014-08-01') 
, PARTITION pA2 VALUES LESS THAN ('B','2014-09-01') 
, PARTITION pA3 VALUES LESS THAN ('B',MAXVALUE) 

, PARTITION pB0 VALUES LESS THAN ('C','2014-07-01') 
, PARTITION pB1 VALUES LESS THAN ('C','2014-08-01') 
, PARTITION pB2 VALUES LESS THAN ('C','2014-09-01') 
, PARTITION pB3 VALUES LESS THAN ('C',MAXVALUE) 

, ... 

, PARTITION pMX VALUES LESS THAN (MAXVALUE,MAXVALUE), 

但是,这会是超过100分区,我可以”。不要想象一个场景那就是你真正想要的。 (我不知道在分区的上限为表是什么。)


随着MySQL 5.1中,我不相信这是可能对多列分区。你可以,只需在user_id列上进行分区,然后在gps_time列中创建子分区(在每个分区内)......但我从来没有这样做过。

相关问题