gpt4 book ai didi

mysql - 对表中的多个分区进行子分区

转载 作者:行者123 更新时间:2023-11-30 23:33:01 25 4
gpt4 key购买 nike

我多次来这里寻找解决方案,几乎每次都能找到最适合我的回复。现在我终于决定写下我的第一个问题。

我也是第一次挂载带分区但不是这么简单的分区的数据库,这就是为什么我在mysql官方文档中没有找到任何解决方案。

我有这张表:

CREATE TABLE SystemEvents 
(
ID int unsigned not null auto_increment primary key,
ReceivedAt datetime NULL,
DeviceReportedTime datetime NULL,
Facility smallint NULL,
Priority smallint NULL,
FromHost varchar(60) NULL,
Message text,
NTSeverity int NULL,
EventSource varchar(60),
EventUser varchar(60) NULL,
EventCategory int NULL,
EventID int NULL,
InfoUnitID int NULL ,
SysLogTag varchar(60),
EventLogType varchar(60),
)

我需要通过“FromHost”键进行分区:

PARTITIOM BY LIST (FromHost)
(
PARTITION p01 VALUES IN ('server1'),
PARTITION p02 VALUES IN ('server2'),
PARTITION p03 VALUES IN ('server3', 'server4'),
PARTITION p04 VALUES IN less than maxvalue
);

到这里一切都OK了。但困难的部分来了:

一旦主表被划分为多个服务器,我需要将每个分区的内容按日期字段 (receivedAt)、周(如果可能的话)分成子分区。

原因是,数据库必须存储公司所有服务器一整年的事件,“server1”和“server2”每个月都会创建近 3 百万行。我们过去需要的大多数查询首先是按服务器进行的,然后,一旦我们为所选服务器过滤了事件列表,我们就会按日期搜索,以找到我们要查找的事件。

那么,你能告诉我在分区 p01 和 p02 中创建子分区的脚本是如何按 receivedAt 字段排序的吗?

如果有什么不明白的地方,请告诉我,我会重新表述。

非常感谢。

问候。Xavidpr

最佳答案

如果表有主键,所有用于分区的列都必须是主键的一部分。

其次,您想在 FromHost 上进行分区,这是一个 varchar 列。使用 varchar 会限制您可以使用的分区类型。此外,如果表大到足以保证分区,最好为主机使用数字 id 而不是主机名。这将加快速度并减少表格大小。

一个直接的解决方案是这样的:

使用 RANGE 分区对 DateTime 进行分区。使用KEY或HASH分区对Host进行分区(最好是整数host_id)

由于您不能在子分区上使用 RANGE,因此您必须按 RANGE 进行分区,并按 KEYHASH< 进行子分区

换句话说,通过 ReceivedAt 进行分区,通过 FromHost 进行子分区

关于mysql - 对表中的多个分区进行子分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605967/

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