memsql 中非强制唯一与强制唯一

Unenforced Unique vs enforced Unique in memsql

我觉得这有点令人困惑。我正在使用 memsql 列存储。我试图了解是否有办法在特定键(例如 eventId)上强制执行重复。我找到了一些关于 Unenforced Unique 的文档,但我并不真正理解它的意图。

非强制唯一键的要点是一个提示:

An unenforced unique constraint is informational: the query planner may use the unenforced unique constraint as a hint to choose better query plans.

来自 https://docs.memsql.com/v6.8/concepts/unenforced-unique-constraints/

遗憾的是,MemSQL 不支持(强制)列存储表的唯一约束。

MemSQL 现在支持版本 7+ 的唯一约束,但只能应用于单个列:

https://docs.memsql.com/v7.1/guides/use-memsql/physical-schema-design/creating-a-columnstore-table/creating-a-columnstore-table/

您的列存储 table 定义可以包含 metadata-only 非强制唯一键、single-column 散列键(可能是唯一的),以及全文键。您不能定义多个唯一键。

在多列上启用 UNIQUE 约束的一个技巧是使用由附加的多列组成的计算列,然后在其上应用 UNIQUE,这将间接对多列强制执行唯一性。

示例:

CREATE TABLE articles (
    id INT UNSIGNED,
    year int UNSIGNED,
    title VARCHAR(200),
    body TEXT,
    SHARD KEY(title),
    KEY (id) USING CLUSTERED COLUMNSTORE,
    KEY (id) USING HASH,     
    UNIQUE KEY (title) USING HASH,
    KEY (year) USING HASH);