# 表分片：当前限制

在使用分片表时，请注意以下限制：

1. **本地分片表和集群分片表不能共存于同一组节点上**：
   在参与复制集群的一组节点上，不能混用：
   - 本地分片表（创建时不带集群前缀：`create table s ... shards='N' rf='1'`）
   - 集群分片表（创建时带集群前缀：`create table c:r ... shards='N' rf='M'`）

   **示例**：考虑一个 2 节点集群，其中：
   - 表 `s` 是在每个节点上独立创建的本地分片表
   - 表 `r` 通过集群在两个节点之间复制
   
   在这种配置下，在同一组节点上尝试创建集群分片表（`create table c:r ... shards='N' rf='2'`）会失败。

2. **集群名称一致性**：
   - 分片子系统在首次使用时会绑定到一个集群名称；这些节点上的所有集群分片表都必须使用同一个集群名称。
   - 一旦选定集群名称，它就会应用于后续所有集群分片表的创建。
   
   **示例**：如果你创建的第一个集群分片表使用：
   ```sql
   create table c:users ... shards='N' rf='M'
   ```
   后续所有集群分片表都必须复用集群 `c`：
   ```sql
   create table c:orders ... shards='N' rf='M'  -- works
   create table d:items  ... shards='N' rf='M'  -- fails
   ```

3. **不支持表结构变更**：
   - 一旦创建了分片表，就不能使用 `ALTER TABLE` 修改其结构。
   - 如需更改 schema，你必须：
     1. 创建一个具有所需结构的新分片表
     2. 将数据复制到新表中
     3. 删除旧表

4. **分片数量限制**：
   - 每个分片表最多 3,000 个分片。
   - 无论集群配置或表大小如何，这个限制都适用。
   - 请相应规划你的分片策略，以确保不超过此限制。

5. **`rf` 和 `shards` 必须是带引号的整数**：
   - 这两个选项都要求使用带引号的数值（`shards='10'`、`rf='2'`）；不带引号、非数字、空值或小数值都会被拒绝。
   - 在独立（非集群）服务器上，`rf` 必须为 `'1'`。
   - 在复制集群中，`rf` 必须介于 `1` 和集群节点数之间。

<!-- proofread -->

