索引数据和 Key-Value 的映射关系 修正

Tikv 的index key 格式 在tidb 文档中描述异常

文档地址:https://docs.pingcap.com/zh/tidb/stable/tidb-computing

文档内容:

索引数据和 Key-Value 的映射关系
TiDB 同时支持主键和二级索引(包括唯一索引和非唯一索引)。与表数据映射方案类似,TiDB 为表中每个索引分配了一个索引 ID,用 IndexID 表示。

对于主键和唯一索引,需要根据键值快速定位到对应的 RowID,因此,按照如下规则编码成 (Key, Value) 键值对:

Key:   tablePrefix{tableID}_indexPrefixSep{indexID}_indexedColumnsValue
Value: RowID

文档这块 有点问题,实际测试的结果:

对于主键和唯一索引,需要根据键值快速定位到对应的 RowID,因此,按照如下规则编码成 (Key, Value) 键值对:

Key:   tablePrefix{tableID}_indexPrefixSep{indexID}indexedColumnsValue
Value: RowID

这里没有"_"。

这里在tikv javaClient 也可看到:

  private static byte[] encode(long tableId, long indexId, Key[] dataKeys) {
    CodecDataOutput cdo = new CodecDataOutput();
    cdo.write(TBL_PREFIX); // 这里是 t
    IntegerCodec.writeLong(cdo, tableId);
    cdo.write(IDX_PREFIX_SEP); // 这里的是_i
    IntegerCodec.writeLong(cdo, indexId);
    for (Key key : dataKeys) {
      if (key == null) {
        throw new TypeException("key cannot be null");
      }
      cdo.write(key.getBytes());
    }
    return cdo.toBytes();
  }

这里indexKey 组成也可以看到组成格式:

Key:   tablePrefix{tableID}_indexPrefixSep{indexID}indexedColumnsValue
Value: RowID

应该是带_的吧

不带的,我这里已经做了代码测试了,带了查不出来,不带可以查出来

1 个赞