# 写热点打散 - 数据库对象（A）

+ 表结构
  + `SHARD_ROW_ID_BITS 和 PRE_SPLIT_REGIONS`

```
CREATE TABLE t (c int) SHARD_ROW_ID_BITS = 4;
ALTER TABLE t SHARD_ROW_ID_BITS = 4;
```

![left](./student-guide/diagram/21-Database-object-01-01.png)

-------------------------------------------------------------

```
CREATE TABLE t (c int) SHARD_ROW_ID_BITS = 4;
ALTER TABLE t SHARD_ROW_ID_BITS = 4;
```

在了解了 TiDB 数据组织模型后，可以在数据库对象创建之初，尽量避免热点：
表结构
在设计表结构时，可以通过合适的方式尽量避免行数据在存储时出现热点：
- SHARD_ROW_ID_BITS 和 PRE_SPLIT_REGIONS
使用非 Int 或 Bigint 类型的主键，TiDB 内部会默认生成一个隐式 _tidb_rowid。此时，使用 SHARD_ROW_ID_BITS 和 PRE_SPLIT_REGIONS 完成 Region 的预打散和切分，具体是把 rowid 打散写入多个不同的 Region，缓解写入热点问题。但是设置的过大会造成 RPC 请求数放大，增加 CPU 和网络开销。
  - SHARD_ROW_ID_BITS = 4 
    - rowid 添加 4 个随机位
    - 切分为 16 个分片