我有一个大型查询,它连接了大约20个表(主要是外连接)。它使用较旧的连接语法和逗号,其中带有(+)的条件用于外连接。 我们注意到它消耗了大量的服务器内存。我们正在尝试几种方法,其中一个想法是将此查询转换为使用较新的ANSI语法,因为ANSI语法允许更好地控制JOIN的顺序,并在应用它们时明确指定JOIN谓词。
将查询从较旧的语法转换为较新的ANSI语法是否有助于减少处理的数据量,对于跨越大量表的大型查询?
答案 0 :(得分:4)
根据我的经验,它没有 - 它生成相同的执行计划。也就是说,较新的JOIN语法确实允许您使用旧语法无法做到的事情。我建议为此原因转换它,并且为了清楚起见。 ANSI语法更容易阅读(至少对我而言)。转换后,您可以比较执行计划。
答案 1 :(得分:0)
DCookie说有关ANSI语法的所有内容。
但是,如果你外连接20个表,难怪你会消耗大量的服务器内存。也许如果你在较小的子查询中减少查询,它可能会提高性能。这样,并非所有表都必须在内存中读取,然后在内存中加入,然后过滤,然后只需要选择的列。
反转此顺序至少可以节省内存,但不必提高执行速度。
答案 2 :(得分:0)
正如DCookie所提到的,两个版本都应该生成相同的执行计划。我将首先查看当前查询的执行计划并确定实际占用内存的内容。快速查看DBMS_XPLAN.DISPLAY_CURSOR输出应该是一个好的开始。一旦您确切知道要尝试改进的查询的哪个部分,那么您可以分析切换到ANSI样式联接是否可以帮助您实现最终目标。