在 SQL 中,有没有办法同时运行多个 SELECT 语句,然后连接结果?我在 Internet 上看到的大多数示例似乎都涉及以顺序方式运行的 SELECT 语句,然后是 JOIN 和其他语句。
代码示例如下所示:
SELECT x, y FROM Table apples WHERE ... as t1
left join
(SELECT x, y FROM Table oranges WHERE ... as t2)
on
t1.x = t2.x
现在假设 SELECT x, y FROM Table apples WHERE ... as t1
需要很长时间。如何同时运行上面的两个 SELECT 语句(例如,类似于 Java 或 C# 中的线程调用)以节省时间?还是 Oracle 已经这样做了?
干杯
最佳答案
不,Oracle 不会同时执行它们。最接近的是并行查询,其中单个查询的阶段可以自动分配到多个并行查询 session 中,结果由查询协调器 session 合并。
您可以尝试将多个查询的逻辑合并为一个(如 zerkms 建议的那样)并优化查询以使用覆盖索引(例如)——换句话说,针对执行缓慢的查询的标准方法。
合并单独执行的查询结果的潜在致命问题之一是它们不一致。除非您使用闪回查询来获得稍旧的结果,否则每个人通常会在一个略有不同的时间点寻找一致的数据。
如果数据是静态的,那么您可以使用 DBMS_Scheduler 同时运行多个查询,加载到一个公用表,然后从那里进行选择。 DBMS_Scheduler 可以定义可以串行或并行执行的流程链,并提供非常复杂的结束条件检查,检查何时应该执行哪些步骤。不过,它的应用难度很大,通常用于批处理(例如数据仓库 ELT 过程)。
关于sql - 如何同时运行两个慢速 SQL SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230778/