tidb用自增和mysql不同,不同版本tidb自增也有不同
AUTO_INCREMENT
是用于自动填充缺省列值的列属性。当 INSERT
语句没有指定 AUTO_INCREMENT
列的具体值时,系统会自动地为该列分配一个值。
出于性能原因,自增编号是系统批量分配给每台 TiDB 服务器的值(默认 3 万个值),因此自增编号能保证唯一性,但分配给 INSERT
语句的值仅在单台 TiDB 服务器上具有单调性。
在 TiDB 各个版本中,AUTO_ID_CACHE
设置为 1
都表明 TiDB 不再缓存 ID,但是不同版本的实现方式不一样:
- 对于 TiDB v6.4.0 之前的版本,由于每次分配 ID 都需要通过一个 TiKV 事务完成
AUTO_INCREMENT
值的持久化修改,因此设置AUTO_ID_CACHE
为1
会出现性能下降。 - 对于 v6.4.0 及以上版本,由于引入了中心化的分配服务,
AUTO_INCREMENT
值的修改只是在 TiDB 服务进程中的一个内存操作,相较于之前版本更快。 - 将
AUTO_ID_CACHE
设置为1
表示 TiDB 使用默认的缓存大小30000
。