首页 > 解决方案 > 通过加入表格的优先级来提高性能

问题描述

有一个关于在Kafka中加入表的性能问题,目前拓扑定义为如下代码:

table1
   .leftJoin(table2, Pair::with)
   .leftJoin(table3, Pair::add)
   .join(table4, (left) -> left.getValue(0).getId() Triplet::add)
   .leftJoin(table5, Quartet::add)
   .leftJoin(table6, Quintet::add)

我只是想知道如果我将.join移到其他人之前,可以提高使用数据的性能和速度吗?(如下面的代码):

table1
   .join(table4, (left) -> left.getValue(0).getId() Pair::with)
   .leftJoin(table2, Pair::add)
   .leftJoin(table3, Triplet::add)
   .leftJoin(table5, Quartet::add)
   .leftJoin(table6, Quintet::add)

标签: javaapache-kafkaapache-kafka-streams

解决方案


是的,性能会有所提高。假设数据库提供者不做其他事情,例如自动优化查询。

Way 1: A left join B left join C inner join D
1.A left join B => Full records A
2.A left join C => Full records A
3.A inner join D => Partial A


Way 2: A inner join D left join B left join C
1.A inner join D => Partial A => A1( significantly improvement here)
2.A1 left join B => Full A1 
3.A1 left join C => Full A1

在第 1 步,方法 2 减少了 DB 中的行数 => 用于左连接 B 和 C 的记录更少。


推荐阅读