tencent cloud

文档反馈

最后更新时间:2024-01-06 12:31:07

    建分表

    分表创建时必须在最后面指定分表键(shardkey)的值,该值为表中的一个字段名字,会用于后续 SQL 的路由选择:
    mysql> create table test1 ( a int, b int, c char(20),primary key (a,b),unique key u_1(a,c) ) shardkey=a;
    Query OK, 0 rows affected (0.07 sec)
    在分布式实例中,shardkey 对应后端数据库的分区字段,因此每一个唯一索引和主键都必须要包含这个 shardkey,否则无法创建表。 场景:存在多个唯一索引时报错。
    mysql> create table test1 ( a int, b int, c char(20),primary key (a,b),unique key u_1(a,c),unique key u_2(b,c) ) shardkey=a;;
    此时有一个唯一索引u_2不包含 shardkey,无法创建表,会报如下错误:
    ERROR 1105 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function
    因为主键索引或者 unique key 索引意味着需要全局唯一,而要实现全局唯一索引,则必须包含 shardkey 字段。
    除上面的限制外,shardkey 字段还有如下要求:
    shardkey 字段的类型必须是 int、bigint、smallint、char、varchar。
    shardkey 字段的值不能有中文,proxy 不会转换字符集,因此不同字符集可能会路由到不同的分区。
    不能 update shardkey 字段的值。
    shardkey=a 放在 SQL 的最后面。
    访问数据尽量都带上 shardkey 字段,非强制要求,但是不带 shardkey 的 SQL 会路由到所有节点,消耗较多资源。

    建广播表

    支持建小表(广播表),此时该表在所有 set 中都是全量数据,主要方便于跨 set 的 join 操作,同时通过分布式事务保证修改操作的原子性,使得所有 set 的数据完全一致。
    mysql> create table global_table ( a int, b int key) shardkey=noshardkey_allset;
    Query OK, 0 rows affected (0.06 sec)

    建单表

    支持建立普通的表,语法和 MySQL 完全一致,此时该表的数据全量存在第一个 set 中,所有该类型的表都放在第一个 set 中:
    mysql> create table noshard_table ( a int, b int key);
    Query OK, 0 rows affected (0.02 sec)
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持