tidb 非int 类型的字段是否可以当聚簇索引表的主键

  1. v5 版本以后,是的(有参数控制着是否非int字段是否可以充当主键),但是不严谨,应该是 不管是不是 int 都可以做主键,只是作为主键后的表 是不是 聚簇表聚簇表具有较好的性能,数据 row 定位能力
  2. 这个问题其实要追溯 TiDB 聚簇表的演进,在 v4 及以前是没有这个参数的,即:int 主键就是聚簇表,其他就是非聚簇表,这是数据存储模型中 key 的编码格式决定的。
  3. 但随着演进,非聚簇表使用存在一定性能问题,通常需要回表(从 index 中找到 row_id 回表,徒增网络消耗,步骤逻辑),本可以直接点查解决(在注重 TP 的场景有较大提升)。v5 tidb 支持了其他类型做主键的聚簇表 功能。 为了兼容以前版本,出现了这个参数