判断题:本地唯一索引可以自动保证跨分区数据全局不重复。()

本地唯一索引可以自动保证跨分区数据全局不重复。()

2 个赞

这个说法是错误的

原因分析

本地唯一索引(Local Unique Index) 的索引数据是跟随分区表的每个分区独立存储的,每个分区维护自己独立的索引结构。因此,它只能保证单个分区内的数据唯一性,无法保证跨分区的全局唯一性。

举个例子:

-- 按 id 进行 HASH 分区
CREATE TABLE t1 (
    id INT,
    name VARCHAR(20),
    UNIQUE KEY uk_id (id) LOCAL
) PARTITION BY HASH(id) PARTITIONS 4;

在这个例子中,id = 100 这条数据只会落在某一个分区中,所以碰巧不会重复。但如果唯一索引列不是分区键,情况就不同了:

CREATE TABLE t2 (
    id INT,
    email VARCHAR(50),
    UNIQUE KEY uk_email (email) LOCAL
) PARTITION BY HASH(id) PARTITIONS 4;

这里按 id 分区,但唯一索引建在 email 上。同一条 email 值可能出现在不同分区中(因为不同 id 可能落在不同分区),而每个分区各自维护索引,无法感知其他分区中是否已存在相同的 email,因此无法保证全局唯一。

如何保证全局唯一?

如果需要跨分区的全局唯一性约束,应该使用全局唯一索引(Global Unique Index)

CREATE TABLE t2 (
    id INT,
    email VARCHAR(50),
    UNIQUE KEY uk_email (email) GLOBAL
) PARTITION BY HASH(id) PARTITIONS 4;

全局索引独立于分区表的数据分布,维护一棵覆盖所有分区的统一索引树,能够真正保证全局唯一性。

1 个赞