想请教大家,一个基于用户的聚合查询,比如sum ,需要Tiflash来加速吗?

大致的语句是
select user, sum(user_amount) from user_bank where userId = ?

加速肯定是能加速的。但tikv能满足就用tikv,tikv满足不了,就用tiflash加速。
需不需要加速还要取决于业务。

1 个赞

看你的表大不大,满足条件的行多不多,你这个userId应该能过滤很多数据,一般情况索引建好就能满足了吧。
如果并发很高,表特别大,用tiflash会好些。

1 个赞

有个注意项:TiFlash 适用于分析型查询和报表查询,对于事务型查询(如更新、插入和删除)并不适用

当然用得上,如果有资源上TiFlash的话

如果一个用户的行数很多的话,适合,如果不多的话,单纯为了这条sql用tiflash没有必要。

如果数据量很小,TiFlash的优势可能不太明显。因为TiFlash是为大规模数据存储和查询而设计的

1 个赞

不一定用的上,如果userId列有索引而且扫描数据量占比不大,用tikv可能更快

有资源就上。

select user, sum(user_amount) from user_bank where userId = ?


带索引的执行计划如上,耗时0.03s

select user, sum(user_amount) from user_bank group by user

同一个表,不带where直接group by
2222
tiflash mpp执行计划如上,3000w数据聚合3w条,也就5.5s左右出结果。

有资源就上。绝对不亏。
没资源就算了,查一个的话靠索引也可以凑合的。

1 个赞

取决于你的这个条件的数据过滤情况。

如果你的where条件能把绝大部分数据过滤掉,只有少数行需要sum,说明很依赖基于userid的过滤情况,此时靠tikv行存上的索引过滤,就可以解决你的问题,而且效率会更高,此时没必要用TiFlash,用它反而可能会变慢。

但是如果你的where条件过滤性不高,会扫描到表的大量的数据行(比如十几万、百万行),此时用TiFlash列存来统计,可以大大提高效率,效果就会比较明显。

1 个赞

Tiflash是列式存储,对于统计分析型操作比较友好。类比ClickHouse,单表任意规模查询聚合性能吊炸天,基本上秒级响应。Tiflash也类似,但也看具体业务场景,如果统计分析AP操作居多,可以试试tiflash mpp

如果分析型的sql不多,单这个场景加个索引搞定,相对节省资源

如果数据量大,分析聚合查询频繁建议用tiflash加速

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