聚簇表的row id 选择

请问下各位老师,从官网看到下面这么一句话,我的疑问是如果聚簇表的主键假设是char、varchar 这种类型的话,那么这个聚簇表的row id 是怎么形成的?

我也找了下文档,貌似没有哪里说到这个非整数型的聚簇表主键,他的rowid是怎么生成的。
非聚簇表是会自动生成一个_tidb_rowid。估计varchar的也是会自动生成吧。只不过查询不到。

一个表中所有的 RowID 都在 [0, MaxInt64) 这个范围内

从这看rowid都是int类型的

我也对这个问题感到好奇

隐藏 handle id 啊,你可以近视认为就是自增 bigint 类型的主键。

你可以看下聚簇表和非聚簇表相关材料。https://docs.pingcap.com/zh/tidb/dev/clustered-indexes

那不就是 事实上的非聚簇表了?

我的理解是这样的,聚簇表的主键假设是char、varchar ,和int其实是一样的,他的key(RowID)都是tablePrefix{ TablelD }_recordPrefixSep{ Col1 },区别只在于如果主键是int型且是自增的,会产生写热点,字符型的不会而已。而非聚簇表的话,他的key都是tablePrefix { TablelD }_recordPrefixSep{ _Tidb_RowlD },就是key都是由_Tidb_RowlD(只有非聚簇表才会自动生成)这个拼接出来的,由于_Tidb_RowlD自动生成也是自增int型,默认都会产生写热点,可以使用SHARD_ROW_ID_BITS相关参数来进行打散,从而缓解写热点问题。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。