如何找出包含太多子查询的查询

时间:2011-06-06 05:44:40

标签: oracle subquery

我已经得到了一个很大的疑问。但是有太多的子查询几乎是不可能的。子查询的数量大约是15-20。你建议我做什么?

2 个答案:

答案 0 :(得分:4)

面对这样的怪物时我通常会做的是:

  1. 将旧式连接替换为新式连接
  2. 使用with语句将每个非平凡子查询模块化为“虚拟”表,例如:
  3. with
     subquery1 as (select /*big query*/ ),
     subquery2 as (select /*big query*/ )
    select *
    from ...
         join subquery1
    where foo in (select foo from subquery2)
    

    此时会出现一些模式,并且通常可以以合理的方式重写查询。

答案 1 :(得分:1)

我要做的第一件事是发出explain plan来查看DBMS如何执行查询并从那里开始。