作为哈希子分区的一部分,如何为键指定多个列?

吉菲吉

我正在使用复合分区(RANGE,然后HASH创建一个表

我的实际表很大,因此下面是一个简化的虚拟表,其中显示了重要部分:

CREATE TABLE table1(
    id INT NOT NULL AUTO_INCREMENT,

    dtvalue DATETIME NOT NULL, -- Used for RANGE partitions

    v1 INT NOT NULL, -- Used for HASH partitions
    v2 INT NOT NULL,

    CONSTRAINT pk_table1 PRIMARY KEY(id),

    CONSTRAINT uk_table1 UNIQUE(v1,v2) -- Unique key for v1 and v2
)
ROW_FORMAT=COMPRESSED
PARTITION BY RANGE(dtvalue)
SUBPARTITION BY HASH(v1,v2) SUBPARTITIONS 32 -- Does this HASH subpartition work?
(PARTITION p20191101 VALUES LESS THAN('2019-11-01'),
 PARTITION p20191102 VALUES LESS THAN('2019-11-02'),
 PARTITION pMax VALUES LESS THAN MAXVALUE);

该表经常由唯一的标识符连接v1v2组合在一起,因此使用两个列作为HASH键都是至关重要的。

我的问题是,您能否指定多个列作为HASH键的一部分

还是可以为密钥指定唯一密钥本身HASH
例如SUBPARTITION BY HASH(uk_table1) SUBPARTITIONS 32

戈登·利诺夫

您可能需要重新考虑有关分区的方法。MySQL非常挑剔-因此主键和唯一约束需要包括分区键。

并且,哈希分区采用整数,但是所允许的显式函数的库非常有限。令人高兴的是,您可以使用存储的生成的列来解决此问题。

因此,以下将实现您指定的目标:

CREATE TABLE table1 (
    id INT NOT NULL AUTO_INCREMENT,

    dtvalue datetime NOT NULL, -- Used for RANGE partitions

    v1 INT NOT NULL, -- Used for HASH partitions
    v2 INT NOT NULL,

    CONSTRAINT pk_table1 PRIMARY KEY(id, dtvalue, v1_v2),

    v1_v2 int generated always as (cast(conv(left(md5(concat_ws(':', v1, v2)), 8), 16, 10) as unsigned)) stored
)
ROW_FORMAT=COMPRESSED
PARTITION BY RANGE COLUMNS (dtvalue)
SUBPARTITION BY HASH (v1_v2) SUBPARTITIONS 32 -- Does this HASH subpartition work?
(PARTITION p20191101 VALUES LESS THAN ('2019-11-01'),
 PARTITION p20191102 VALUES LESS THAN ('2019-11-02'),
 PARTITION pMax VALUES LESS THAN MAXVALUE);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何删除哈希值的一部分?

如何指定间距约束作为超级视图尺寸的一部分?

作为子查询一部分的 SQL 列的运行总计

作为子查询一部分的 SQL 列的运行总计

合并多个列,将变量名作为数据的一部分

如何在子查询中使用HAVING作为Select语句的一部分

如何提取子字符串作为dplyr :: mutate管道的一部分

C# 如何组合作为列表一部分的多个 JSON 数组?

如何在Logstash中将json拆分为多个事件,其中事件是哈希的一部分(唯一)

如何基于多个条件更改列的一部分中的值?

我将如何为作为 cloudant nosql 中数组一部分的元素创建索引?

如何将我的/ boot分区合并为/分区的一部分?

如何创建作为数组中对象一部分的扁平数组数组,实质上是获取多个对象的子数组?

如何指定空格作为通配符字符串的一部分以批量重命名文件

IdentityServer4:如何指定身份提供者作为授权请求的一部分?

如何在接口块内指定模块变量作为伪参数声明的一部分?

如何修复“查询不包含指定的表达式‘credit usd’作为聚合函数的一部分”?

仅打印哈希的一部分

查找多个作为一个的一部分

调用作为 ngFor 一部分的子组件的函数

Knex.js 子选择“in”子句作为连接的一部分

打开子窗口作为MainWindow的一部分

子域,作为REQUEST_URI的一部分

如何使连续线的一部分成为连续线的另一部分的列?

如何链接到页面的一部分?(哈希?)

密钥如何成为哈希值的一部分?

如何删除哈希文件中文件路径的第一部分?

如何卸载正在使用的单个分区的一部分?

如何在Paw中将文件作为多部分请求的一部分上载?