gpt4 book ai didi

mysql - 如何按列值 "user_id"和 "gps_time"对mysql进行分区?

转载 作者:行者123 更新时间:2023-11-29 23:52:07 24 4
gpt4 key购买 nike

我的表方案:

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 列按过去 3 个月进行分区(即:3 个分区)。

如何做到这一点?非常感谢~

最佳答案

使用 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 列上创建子分区(在每个分区内)...但我以前从未这样做过。

关于mysql - 如何按列值 "user_id"和 "gps_time"对mysql进行分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25578515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com