问题:select_1 UNION select_2,其中 UNION 左右的两个子查询是否并行。
场景:由于我们的分库分表中间件对库内表的子查询会进行 union,而我们是 2048 分表,也就是最大可能 union 2048次,如果是串行执行,结果是我们不能接受的
测试结果
mysql> select version();
+---------------+
| version() |
+---------------+
| 内部基于mysql |
+---------------+
1 row in set (0.00 sec)
mysql> select sleep(1) union select sleep(3);
+----------+
| sleep(2) |
+----------+
| 0 |
+----------+
1 row in set (3.01 sec) -- 串行
解决:
1、维护一个连接池,发两个连接到服务端,client merge。 这样太复杂了,业务系统有共性需求都是重复造轮子
2、或者把分表数量减小