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