为什么走了tiflash 查询反而更慢了

为什么使用tiflash 查询速度反而慢了

这是最开始没有走tiflash 的执行计划

这是执行sql的时间,20秒左右

设置表tiflash 副本

ALTER TABLE zldw.sys_desensitization SET TIFLASH REPLICA 1;

ALTER TABLE qijiang_gongwei.JG_DIABETES SET TIFLASH REPLICA 1;
ALTER TABLE qijiang_gongwei.JKDA_PERSONINFO SET TIFLASH REPLICA 1;

这是走tiflash 的执行计划

这是走tiflash 查询运行时间,37秒,比没有走tiflash 多的17秒

没有说走TiFlash一定就比TiKV快的,只是让CBO优化器多了一种选择,而且你这个执行计划里面也没看到MPP算子

可能是由于统计信息不准确,优化器选择错误,导致有些算子没有下推,所以就变慢了。
建议你analyze一下相关的表再试试

另外,您这是哪个版本的TiFlash?只有一个节点?

3个节点,我直接用的tiup 命令扩容的,应该是和数据库版本一致吧。

analyze 这个试了的。

不是这些算子都可以走tiflash 吗

一个150W的表,走没走索引的关系

从执行计划看是TiKV+TiFlash混用,没有使用MPP计算,没看到ExchangeSender和ExchangeReceiver算子。TiFlash上又没索引,混用就等于是全列扫描

https://docs.pingcap.com/zh/tidb/stable/explain-mpp

那执行计划中为啥还是显示你的统计信息过期了呢:rofl:

没有看到actrows,所以无法判断这几张表是否会对优化器的选择产生影响

tiflash 上面怎么建索引?

我说的是analyze table 表名。重新收集表的统计信息

analyze TABLE qijiang_gongwei.JG_DIABETES;

analyze TABLE qijiang_gongwei.JKDA_PERSONINFO;

可以了,但是查询速度还是一样的慢。

TiFlash不支持索引

不支持索引应该不得比tikv 快吧。

那他的优势是什么哟。数据量大了还是要索引才得行吧。

优势是支撑mpp计算,或者宽表场景。比如你表有200个字段,你只需其中的个别字段做聚合,这时列存优势就凸显了

把执行计划右边带时间的那一列发出来一下吧

3个节点的话先把副本数改为2再试下吧。