gpt4 book ai didi

mysql - MYSQL 中的子分区

转载 作者:行者123 更新时间:2023-11-29 11:09:26 26 4
gpt4 key购买 nike

我需要按日期对表进行分区,然后该分区需要按用户 ID 进行子分区。我有如下分区表:

ALTER TABLE sentbox1 PARTITION BY RANGE(to_days(CreatedDateTime))(
PARTITION p20161130 VALUES LESS THAN (to_days('2016-11-30')),
PARTITION p20161201 VALUES LESS THAN (to_days('2016-12-01'))
);

现在,如何通过用户 ID 将子分区添加到分区“p20161130”和“p20161201”中。

最佳答案

我在 MySQL 8.0.0-dmr 上测试了这个:

ALTER TABLE sentbox1 
PARTITION BY RANGE(to_days(CreatedDateTime))
SUBPARTITION BY HASH(userid)
SUBPARTITIONS 4 (
PARTITION p20161130 VALUES LESS THAN (to_days('2016-11-30')),
PARTITION p20161201 VALUES LESS THAN (to_days('2016-12-01'))
);

请注意,子分区仅适用于 HASH 或 KEY 作为分区方法。

参见https://dev.mysql.com/doc/refman/5.7/en/partitioning-subpartitions.html了解更多信息。

<小时/>

瑞克的回复:

@RickJames,我想您知道这完全取决于运行的查询是否与分区和子分区一致。如果您的查询逻辑导致查询跨越子分区,则不会带来任何好处。

我确实确认分区修剪会留意子分区键的条件。

当我仅在主分区键上设置条件时,它必须扫描该分区的所有子分区:

mysql> explain partitions select * from sentbox1 
where createddatetime = from_days(736663) \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: sentbox1
partitions: p20161201_p20161201sp0,
p20161201_p20161201sp1,
p20161201_p20161201sp2,
p20161201_p20161201sp3
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1
filtered: 100.00
Extra: Using where

当我在userid(子分区键)上另外指定一个条件时,我们看到要检查的子分区子集减少了:

mysql> explain partitions select * from sentbox1 
where createddatetime = from_days(736663) and userid=3\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: sentbox1
partitions: p20161201_p20161201sp3
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1
filtered: 100.00
Extra: Using where

关于mysql - MYSQL 中的子分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40859243/

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