主檔類資料是否有需要用AUTO_RANDOM (Table schema design)

Hi 顧問們好,

目前已知道TiDB中對於大表有提供AUTO_RANDOM方式去避免掉使用AUTO_INCREMENT會產生熱區的問題。
若是一些主檔類的資料 ex: 國家(country)、物料 資料量不大的表格,是否還需要再多一個id,型態為 big int primary key auto_random,還是直接使用auto_increment即可?

對於主檔類資料量不大的表格,使用AUTO_RANDOM or auto_increment 效能上會有差異嗎?

1. AUTO_RANDOM
CREATE TABLE country(
id BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_RANDOM,
country_id INT,
country_name VARCHAR(100),
);

2. AUTO_INCREMENT
CREATE TABLE country(
country_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
country_name VARCHAR(100)
);

建议使用 auto_random ,因为在当前版本下 primary key 为整数类型的情况不能通过 shard_row_id_bits 和 pre_split 的 option ,在建表成功后就开始预均匀切分 2^(PRE_SPLIT_REGIONS) 个 Region。因此在使用 auto_increment 的情况下,小表在排除了写入热点的情况下,读热点有也可能会存在(小表数据数据量有可能没有足够 split 和调度到多个 tikv 上面),就需要额外对数据进行手工打散来。
具体可以参考一下: (关于小表的部分)
https://book.tidb.io/session4/chapter7/hotspot-resolved.html