不用写同步代码高耦合的方案 ,目前想到了 把 mysql 三表数据数据同步到一个新的 mysql 表里 ,然后此表同步 es ,es 来加速查询,flink 支持 同步 多表 join 的查询结果 到 新的一张表里吗
1
28Sv0ngQfIE7Yloe 2023-09-04 14:49:25 +08:00
前半段看懂了,后半段没看懂
|
2
dayeye2006199 2023-09-04 14:52:54 +08:00 via Android
你先 explain 看一下执行计划,这个查询是在做什么,找数据还是做聚合,啥也没有,怎么谈优化呢?
|
3
ShadowPower 2023-09-04 14:59:21 +08:00
拿去问了 GPT-4-0612
得到的回答: Flink 支持多表 join 的查询结果同步到新的一张表里。你可以使用 Flink SQL 或者 DataStream API 来实现这个需求。 以下是一个使用 Flink SQL 实现的例子: ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env); // 注册 a, b, c 三个表 tableEnv.registerTableSource("a", ...); tableEnv.registerTableSource("b", ...); tableEnv.registerTableSource("c", ...); // 执行 join 操作并将结果插入到新的表 tableEnv.sqlUpdate( "INSERT INTO new_table " + "SELECT * " + "FROM a " + "JOIN b ON a.order_id = b.order_id " + "JOIN c ON a.order_id = c.order_id" ); env.execute(); ``` 这个例子中,我们首先创建了一个 `StreamExecutionEnvironment` 和一个 `StreamTableEnvironment`。然后,我们注册了 a, b, c 三个表。接着,我们执行了一个 join 操作,并将结果插入到新的表中。 需要注意的是,这个例子中的 join 操作是基于事件时间的,并且假设 a, b, c 三个表中的数据都是按照订单号排序的。如果实际情况不是这样,你可能需要使用其他类型的 join 操作,例如 interval join 或者 window join 。 另外,你提到了使用 ES 来加速查询。这确实是一个可行的方案。你可以使用 Flink 的 Elasticsearch connector 将数据写入到 ES 中。然后,你可以使用 ES 的强大的搜索和分析功能来加速查询。 最后,关于优化查询性能,还有一些其他的方案可以考虑: 1. 对关联字段建立索引:如果 abc 三个表都是根据订单号关联的,那么可以考虑对订单号字段建立索引。这样可以大大提高 join 查询的性能。 2. 分区和分桶:如果 abc 三个表的数据量非常大,那么可以考虑对表进行分区和分桶。这样可以将大表切分成多个小表,从而提高查询性能。 3. 使用更快的存储引擎:如果你正在使用 MySQL ,那么可以考虑切换到更快的存储引擎,例如 InnoDB 或者 MyRocks 。 4. 使用列式存储:如果你的查询主要是聚合操作,那么可以考虑使用列式存储,例如 Apache Parquet 或者 ORC 。列式存储可以大大提高聚合查询的性能。 5. 使用缓存:如果你的查询主要是点查操作,那么可以考虑使用缓存,例如 Redis 或者 Memcached 。缓存可以大大提高点查查询的性能。 |
4
Ginz 2023-09-04 15:00:14 +08:00
explain 看哪个没走索引,分析分析加试试咯
|
5
oppoic 2023-09-04 15:20:52 +08:00
不用 join ,三次单表查询
|
6
llzzll1234 2023-09-04 15:38:20 +08:00
不涉及聚合而且查询量不大的话,直接查多次反而会更快。
以及,flink 是支持多表 join 后同步的,甚至可以编写复杂 sql 同步和写代码处理数据后同步 |
7
Tenlearn 2023-09-04 15:42:14 +08:00
按订单号分三次查?
|
8
NoobNoob030 2023-09-04 15:48:55 +08:00
同步 es 可行,我最近也用 es 优化了一次类似的操作
|
9
opengps 2023-09-04 15:50:39 +08:00
只需要问一个问题:三个表的订单号字段,都有独立索引吗?
|
10
Plutooo 2023-09-04 18:11:30 +08:00
订单号索引,然后单表查询代码做关联就好了吧
|
11
hidemyself 2023-09-04 18:22:10 +08:00
能不能贴一下 sql 语句,光看描述,感觉应该不会慢
|
12
xuanbg 2023-09-05 08:08:51 +08:00
有索引的话,应该不会慢
|