首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对表中的多个分区进行子分区

问对表中的多个分区进行子分区
EN

Stack Overflow用户
提问于 2012-03-08 01:03:29
回答 1查看 332关注 0票数 1

我来这里寻找解决方案很多次了,几乎总是找到一些适合我的答案。现在我终于决定写我的第一个问题。

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

我有一张桌子:

代码语言:javascript
复制
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“键进行分区:

代码语言:javascript
复制
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
);

在这里之前一切都没问题。但困难的部分来了:

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

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

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

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

非常感谢。

致以问候。Xavidpr

EN

回答 1

Stack Overflow用户

发布于 2012-03-27 02:31:08

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

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

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

在DateTime上使用RANGE分区进行分区。在主机上使用键或散列分区进行分区(最好是整数host_id)

由于您不能在子分区上使用RANGE,因此您必须按RANGE分区,并按KEY或HASH分区

换言之,按ReceivedAt分区,按FromHost分区

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9605967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档