如果需要join,而且查询出全部列数据,还适合tiflash吗?

【 TiDB 版本】
v5.1.2
【遇到的问题】
目前有一个场景,我需要进行6张表的join,并且select出这6张表大部分的字段以及group by操作

1、这种情况下我还适合用tiflash吗?

2、tiflash会走下列哪种方式呢?
一种是先在tiflash进行join,得到join后结果集,再根据主键id去tikv中组合出大宽表,得到最终结果集
另一种是,tiflash会把所有需要的字段提出出来(相当于没裁剪),然后带着这几十个字段去join,一次性得到最终的结果集

这个情况适合
需要注意sql的写法

可以看看这个 有没有启发

我觉得适不适合还要考虑如下这几方面因素:
1、这6张表中,有没有至少1张表是小表,还是全部都是大表
2、这6张表在join字段上有没有索引,索引的筛选能力如何
3、除了join字段以外,有没有存在其它字段上的where条件,并且这个字段上有索引,筛选后是否能大大降低表的数据规模

如果满足:至少有一张小表,大表在join字段上有非常好的索引,最后要返回很多字段,那么我觉得TiKV就够用。如果全部是大表join,并且通过非join字段上的where条件走索引也无法降低表的规模,那么就可以考虑一下TiFlash的MPP。

还是建议用engine隔离分别测试一下最好

这个自己测一下,也有可能混合使用 TIKV 和TIFLASH 引擎。主要还是根据你的数据量,筛选的数据量有关系。

对于第二个问题自问自答一下

根据分析执行计划,发现如果select的字段增多,会在join阶段耗时线性增加,并且根据分析磁盘io发现,磁盘的读io在最初的几分钟已经结束了,后续磁盘读io接近0

所以可以推测,tiflash是在全表扫描时,就已经把所需要的列全读到内存了。而非join结束之后再根据主键组装出数据

这种不是TiFlash最擅长处理的,但是可以处理,主要还是优化业务逻辑,适配TiFlash

如果有大量的字段被用到则用tiflash,优化效果不会很明显

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。