sql - 如何同时运行两个慢速 SQL SELECT 语句

标签 sql oracle plsql

在 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/

相关文章:

oracle - SQL Fiddle 输出错误

sql - R的滚动日期范围内的唯一值计数

sql - 如何根据时间戳确定一周的第一天和最后一天?

python插入mysql

linux - 将 oracle 查询结果存储到 bash 变量中

database - 如何检查类型的依赖项以删除它们并替换/修改初始类型?

python - 如何使用 sqlalchemy 关系实现多个连接

oracle - 如何查找 Oracle 服务名称

oracle - 在 PL/SQL 中获取相似的字符串并具有良好的性能

甲骨文触发器不工作