地藏Kelvin
(地藏kelvin)
1
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
一个表中有主键、name字段、code。其中name是有索引的。
然而 key 由 table_id、主键rowid管理一行数据,value为数据,由Region管理。
索引数据的 key 由 table_id、index_id 以及索引列的值编码,value为数据,也由Region管理。
我所理解第一个Region管理主键纬度,第二个Region管理索引纬度。value是真实数据。
-
那这表的同一行数据存在两个Region里面吗?
-
这是不是意味着表的一行数据,会存两次?如果是的话,那增加索引就会增加region了。就会增加磁盘的消耗,本来一亿数据变两亿是吗?
-
如果没有走索引和主键来select ,那会使用哪个Region
-
修改一行数据是不是会更新存在的两个Region中这个数据,他们是怎么实现同时更新两个Region里的相同数据的?
地藏Kelvin
(地藏kelvin)
3
大致了解了。那确认一下,存索引的Region里,Map的key是 table_id、index_id 以及索引列的值编码,value是真正数据,还是指向真正数据的地址?
来了老弟
4
您好,
1.如果满足唯一性约束的主键或者唯一索引,kv 编码形式:
Key: tablePrefix{tableID}_indexPrefixSep{indexID}_indexedColumnsValue
Value: RowID
key 的组成可以满足唯一性要求,所以 value 对应的是 rowid
2.如果该索引仅仅是一个非唯一的二级索引,他得索引结构为
Key: tablePrefix{TableID}_indexPrefixSep{IndexID}_indexedColumnsValue_{RowID}
Value: null
所以 value 为空,因为已经可以通过 key 来判断索引数据了。
推荐看下 48h 硬核 book,《TiDB in Action》:
https://book.tidb.io/session1/chapter3/tidb-kv-to-relation.html
1 个赞
system
(system)
关闭
5
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。