hash分片上的索引效率如何

【 TiDB 使用环境】生产环境
【 TiDB 版本】v8.1.1
【遇到的问题:问题现象及影响】
role表:
id是主键, int64
serverid, 是普通索引, int32
还有一些其他成员

有一个表, 50%的读和50%的写. 主键是使用号码段生成的, 64个号码段, 每个段100W, 每次都随机的使用其中一个段, 这个段用完了就重新申请一个段. 还有一个索引, 索引的重复度很低.

读操作是按照索引查询和按照主键查询, 写操作是按照主键更新.

现在的问题是, 把这个表改成hash分片(比如32个分片, 或者64个分片), 和保留现有的设计, 哪种表现会好一些? Tidb的Hash分片数量增加, 会影响按照普通索引查询的速度吗? 影响有多大?

先看下这个表的表结构,是聚簇表嘛?

补充了一下表结构, id是主键, 通过号码段生成的

看着应该是聚簇表,聚簇表的话,主键决定你的key,主键是使用号码段生成的, 64个号码段, 每个段100W, 用完了接着申请.—这里是顺序使用吗?例如从1号码段的第一个开始,用完了第一个号码段,然后用第二个号码段?如果是这样,那hash分区表确实应该可以缓解写热点的。
但是索引查询的话,估计你用不了分区裁剪了,可能分区表的索引查询可能确实要慢一点。

同时开64个号码段, 随机在其中一个段里面取一个号码, 这个段取完了再重新分配一个100W的段.

感觉分片意义不大 tidb本身就自己分片了

2 个赞

那这样的话,除了表刚生成的时候有热点(这里也可以预先通过splie region的方式,将不同的数据预先打散到多个region中),后面region多了不就自动打散写热点了嘛?那就没必要再用hash分区了,当然如果你说的是分片的话,tidb本身就是分片的,tidb本身数据就是分成一个一个的region的。。