tidb拿到tikv结果集流入tiflash进行计算的需求

【 TiDB 使用环境】Poc
【 TiDB 版本】v7.0.0
对于一个两表关联的查询,select count(*) from a ,b where a.col1=b.col2 and a.col2=‘xxx’ 。
a,b都有tiflash引擎,a.col2有索引。假设表a几千万数据通过a.col2='xxx’过滤后只有10条记录,表b有几亿数据。那么在这种形式下:
1、如果a,b都走tiflash,那么a表要进行全表扫,代价较大。
2、如果a表走tikv通过索引过滤出10条记录,那么需要把b表数据全部发到tidb节点上做Join操作,10条Join几亿数据代价较大。而且如果放到tidb节点上做join,那么这个join算子的父算子都只能在tidb节点执行,也就是后续无法用到tiflash能力。

是否可以添加另外一种机制,通过tikv索引过滤少量结果集发给tidb后,由tidb发给tiflash作为算子的输入部分和大表b做hashJoin,这样子效率会比较快。

你在生成执行计划时就需要决定走tikv还是tiflash了,那时候你的过滤条件具体能过滤到多少数据,你并不知道,全看统计信息,而且你的条件a.col1=b.col2如果b表上col2上有索引的话,没必要走tiflash,直接走tikv索引就行了

这个需求有点强人所难,但是主要是想利用tikv的索引过滤能力+tiflash的算子运算能力,让复杂查询更快一些。

这个听起来不错,就是不知道实现难度怎么样

tikv 也搞个mpp

这个需求你直接分成两条sql写不就好了吗 :joy:

直接sql可以实现吧