【 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,这样子效率会比较快。