【 TiDB 使用环境】生产环境
【 TiDB 版本】tidb_v6.1.0
【复现路径】
【遇到的问题:关联两个亿级数据量的表(跨库),查询走KV的时间反而要比走Tiflash快,是不是SQL有问题,有没有优化方式】
【资源配置】
【附件:截图/日志/监控】
上SQL
上执行计划
盲猜是猜不出啥的
看执行计划,TiFlash是走的全表扫描,慢是正常的。
TiFlash并不是一定比TiKV快的,在OLAP方面,因为TiFlash是列存,所以做count、sum等操作的时候,是会快,但像文中只是查询字段,并不一定有优势。
缓存了吧?5.5的时候tiflash是没有缓存的,每次查询都要重新扫表,tikv有缓存机制,有可能走了缓存;另外看下节点数是否一样,比如说tikv节点比tiflash多,也会出现这个问题;
感觉CBO优化器,只要开启tiflash,都会默认走tiflash,除非统计数据不准,最好执行下ANALYZE table 重新统计下数据
你查的是很多字段,你试试sum,avg,group by这样的操作,再对比一下。
我要拍脑袋回答问题了:
走tikv快是因为用了索引。
tiflash存在的意义一定程度上是节省内存。因为tikv如果总执行join的话,内存就满了。
tiflash是列存,一次取出一列的所有值都用不了多少内存。tikv的话如果全表扫那可真得拿全表数据了,内存就爆了。
看着结论硬推出一个看似合理的原因
你把limit去了,然后max下你现在查的所有字段,看看哪个快就知道了。。。。