gpt4 book ai didi

MySQL 按年和周分区

转载 作者:可可西里 更新时间:2023-11-01 08:21:11 27 4
gpt4 key购买 nike

我想使用 mysql 分区表将表分区为 YEAR 和 WEEK 编号。我确切地知道如何使用 mysql 合并表执行此操作,但分区表不同。有人可以帮助下表架构吗?

CREATE TABLE `tableName` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`dateandtime` datetime NOT NULL,
`othervalue` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

还有是不是一定要在某个引擎里?

如果我将日期和时间存储为 int(10) 时间戳,我该怎么做?

CREATE TABLE `tableName` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`dateandtime` int(10) NOT NULL,
`othervalue` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

最佳答案

MySQL 5.1 无法按日期进行分区,因此您必须解决...通常您按函数 TO_DAYS(dateandtime) 进行分区,例如:

CREATE TABLE tbl (... ) ENGINE=InnoDBPARTITION BY RANGE (to_days(dateandtime)) ( PARTITION pNULL VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION p20111218 VALUES LESS THAN (TO_DAYS('2011-12-18')) ENGINE = InnoDB, PARTITION p20111225 VALUES LESS THAN (TO_DAYS('2011-12-25')) ENGINE = InnoDB, PARTITION pNew VALUES LESS THAN MAXVALUE ENGINE = InnoDB)

我在这里定义了 4 个分区——第一个只是为了完整性,这样以后插入日期就不会失败。 (您不能插入一个分区不存在的值。)第一个分区是为了性能——NULL 值将被保留地存储在那里。中间的 2 个分区实际上正在使用,每个分区保留一周的数据。

您可以使用 ALTER TABLE tbl DROP PARTITION xyz 删除旧分区(与仅删除旧行相比,这非常快)。您可以通过拆分最后一个分区来添加新分区:

ALTER TABLE tbl REORGANIZE PARTITION pNew INTO (  PARTITION p20120115 VALUES LESS THAN (TO_DAYS('2012-01-16')),  ...  PARTITION pNew VALUES LESS THAN (MAXVALUE));

关于MySQL 按年和周分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8854095/

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