mysql - 如何在非主键列中对表进行分区(MYSQL)

标签 mysql partitioning database-partitioning

我有一个包含 50GB 数据的表,现在我尝试在日期时间列上进行分区,下面是详细信息。

CREATE TABLE EDR2 ( id varchar(255),appKey varchar(255),clickedTime datetime ,ettId bigint(20),primary key(id),Key `ettId` (ettId),Key `clickedTime_index` (`clickedTime`) )
PARTITION BY RANGE (day(clickedTime))
( PARTITION p01 VALUES LESS THAN (2) ,
PARTITION p02 VALUES LESS THAN (3) ,
PARTITION p03 VALUES LESS THAN (4) ,
PARTITION p04 VALUES LESS THAN (5) ,
PARTITION p05 VALUES LESS THAN (6) ,
PARTITION p06 VALUES LESS THAN (7) ,
PARTITION p07 VALUES LESS THAN (8) ,
PARTITION p08 VALUES LESS THAN (9) ,
PARTITION p09 VALUES LESS THAN (10) ,
PARTITION p10 VALUES LESS THAN (11) ,
PARTITION p11 VALUES LESS THAN (12) ,
PARTITION p12 VALUES LESS THAN (13) ,
PARTITION p13 VALUES LESS THAN (14) ,
PARTITION p14 VALUES LESS THAN (15) ,
PARTITION p15 VALUES LESS THAN (16) ,
PARTITION p16 VALUES LESS THAN (17) ,
PARTITION p17 VALUES LESS THAN (18) ,
PARTITION p18 VALUES LESS THAN (19) ,
PARTITION p19 VALUES LESS THAN (20) ,
PARTITION p20 VALUES LESS THAN (21) ,
PARTITION p21 VALUES LESS THAN (22) ,
PARTITION p22 VALUES LESS THAN (23) ,
PARTITION p23 VALUES LESS THAN (24) ,
PARTITION p24 VALUES LESS THAN (25) ,
PARTITION p25 VALUES LESS THAN (26) ,
PARTITION p26 VALUES LESS THAN (27) ,
PARTITION p27 VALUES LESS THAN (28) ,
PARTITION p28 VALUES LESS THAN (29) ,
PARTITION p29 VALUES LESS THAN (30) ,
PARTITION p30 VALUES LESS THAN (31) ,
PARTITION p31 VALUES LESS THAN MAXVALUE);*

我收到错误:-

***ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function***

我无法在(id,clickedTime)中创建复合主键,也无法删除主键,因为它会允许重复记录, 我不想更改我的代码中的任何内容。 所以请提出建议。

最佳答案

分区表上的任何 UNIQUE 键都必须包含分区键,否则 UNIQUEness 约束的成本将非常高昂。每个 INSERT 都必须检查所有分区以验证是否违反了约束。

考虑到分区通常仅在非常大的表上有用,这种开销将是致命的。

您要在每月的某一天进行分区 - 为什么?你希望获得什么?检查 clickedTime 上的“范围”不会执行“分区修剪”(我认为)。请参阅解释分区选择...

ID 是什么样的,如果是 VARCHAR(255) 的话?大主键通常不实用。

这个表是MyISAM还是InnoDB?

我建议摆脱分区。

有哪些 SELECT?我目前没有看到复合索引,通常谨慎的做法是使用以 DATETIME 结尾的复合索引。

关于mysql - 如何在非主键列中对表进行分区(MYSQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28395168/

相关文章:

C#:作为字节数组下载后文件损坏

load-balancing - Service Fabric 是否提供 api 来在运行时在分区之间移动参与者

amazon-web-services - 从胶水Cloudformation模板对Athena表进行分区

数据库分区 - 水平与垂直 - 规范化和行拆分之间的区别?

MySQL 按月分区不起作用

php - 在 PHP 中调试 SQL 语法错误

php - 使用 PHP 将 HTML 表单中的数据插入到 MySQL 数据库

php - 如何检查 $row ['column_name' ] 是否返回空 php mysql

oracle - 全局分区索引是否比非分区索引更好(更快)?

PostgreSQL 11 在索引应该足够的分区表上进行并行 seq 扫描