tidb 有没有办法指定关联密切的表在一个或者临近的region中?

tidb 有没有办法指定关联密切的表在一个或者临近的region中?

比如 A和B表经常关联查询,如果在一个region中肯定会节省IO等资源,有什么办法配置吗?

没这个功能,如果表数据量小并且不常修改可以试试小表缓存。
A和B表经常关联查询的话一般tikv也会把数据缓存到内存,不用担心速度

它没有在本地做join的能力,还得拿到tidb做

1 个赞

使用label功能,能使用表定位到IDC,机架、KV,但具体的REGNE有难度

1 个赞

看文档说可以多表合并到同一个region,我看到我的很多小系统都是几十条几百天记录的表,但是还经常在一起访问,如果能自动合并到一个region应该会很好。
官方直说能合并但是没说怎么合并,应该是自动的

在 5.0 之前,TiDB 默认关闭跨表合并 Region 的功能。从 5.0 起,TiDB 默认开启跨表合并 Region 功能,减少空 Region 的数量,降低系统的网络、内存、CPU 的开销。你可以通过修改 schedule.enable-cross-table-merge 配置项关闭此功能。

这个似乎不能满足我的期望

本地join如何理解?

合并是空region特别多才自动触发的

用全局临时表是否可以满足你的需求…

没有这功能。
如果你的表不大,可以试试小表缓存功能或者临时表。

就像类似分库分表逻辑,两个关联键采用同样的分片逻辑,这样join的时候就不用拿到计算层做了,直接在存储层做就好了,因为能join上的一定在同一个存储节点

好的,感谢回复。

label可以标记,但是好像没这么小的细粒度把

其实在tidb得角度看,从紧邻得region读取,不如从不同的机器读取。
毕竟单个机器的物理临近位置读取,局部看可能会快,但读取能力有上限。但是多个机器的读取能力就没有上限了。

还有如果仅仅是关联,让tidb做没有问题,如果关联+聚合,最好是直接推给tiflash做,tidb直接拿结果。在列存上做,这个读取扫描的数据量可能会小很多。

tidb目前没这个设计,join必须到tidb server做