`
czwlucky
  • 浏览: 49919 次
  • 性别: Icon_minigender_1
  • 来自: 河南郑州
社区版块
存档分类
最新评论

FULL JOIN还是少用为妙

阅读更多

今天早上到公司,发现一个JOB跑了几个小时还没停下来,测试的时候这个任务执行两分钟就结束了。于是找DBA帮我查原因,原代码大致如此:

select g2.col1, g1.col2
  from (select nvl(tt.col1,pp.col1) col1, nvl(tt.col2,0) + nvl(pp.col2,0) col2
          from (select u.col1, count(*) as col2
                  from a g
                 inner join b u on g.username = u.username
                 where ...
                 group by u.col1) tt
                full join
                (select col1, count(*) as col2
                  from c t1, d t2
                 where ...
                 group by t2.col1) pp
         on tt.col1 = pp.col1) g1,
       b g2
 where ...;

 经过分解执行,发现没有问题,只要整体执行就特别慢。查看执行计划,发现问题出现在full join上, tt的结果比较多,pp的结果相当少。DBA建议改用unoin all,于是改为:

select g2.col1, g1.col2
  from (select col1, sum(col2)
          from (select u.col1, count(*) as col2
                  from a g
                 inner join b u on g.username = u.username
                 where ...
                 group by u.col1
                union all
                select col1, count(*) as col2
                  from c t1, d t2
                 where ...
                 group by t2.col1)
         group by username) g1,
       b g2
 where ...;

 重新执行任务,OK!

 

 

20110825

最近又遇到oracle的一个BUG,在存储过程中执行cube函数,产生600错误:

-- FOR <ORA-00600: 内部错误代码, 参数: [qctcte1], [0], [], [], [], [], [], []>
execute immediate 'alter session set "_optimizer_cost_based_transformation" = off';

 

同时,今天DBA帮我解决了一个问题,还是full join引起的,这个SQL的执行计划cost值大的可怕, 执行两个小时进度还只是百分之零点几.

DBA拿出了杀手锏:

alter session set "_complex_view_merging" = false;

问题搞定!(当然,实际上可以有别的办法绕过去,那就是不使用full join也能解决问题) 

分享到:
评论

相关推荐

    Linq to datable(Left join right join full join)实例

    描述 "LINQ to datable实现Left join right join full join VB2010源码" 提示我们这个实例是用Visual Basic 2010编写的,它展示了如何通过LINQ查询语法来实现对DataTable对象的连接操作。VB2010是.NET Framework 4的...

    inner join、 left join 、right join、 outer join之间的区别

    根据连接的方式不同,可以分为几种类型:`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`以及`FULL OUTER JOIN`。下面将详细解释这些连接方式的区别。 #### INNER JOIN (内连接) `INNER JOIN`是最常用的一种连接方式,它...

    SQL表连接查询(inner join、full join、left join、right join)1

    在SQL中,主要有四种类型的连接查询:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。下面将详细解释这四种连接方式。 1. 内连接(INNER JOIN): 内连接返回两个表中...

    sql中join总结

    5. **全外JOIN (FULL OUTER JOIN)**: 全外JOIN结合了左外JOIN和右外JOIN的特点,返回所有两侧表格的记录,无论是否存在匹配。如果有任何一方没有匹配的记录,结果将包含NULL值。 在实际应用中,选择哪种JOIN取决于...

    join on 语句及扩展

    4. FULL JOIN (或 FULL OUTER JOIN): FULL JOIN返回两个表中的所有记录,无论是否找到匹配项。如果没有匹配,结果将用NULL填充相应的列。语法: ```sql SELECT columns FROM table1 FULL OUTER JOIN table2 ON table...

    sql join( inner join, outer join) 分析

    接下来,我们讨论OUTER JOIN,它分为LEFT JOIN、RIGHT JOIN和FULL JOIN。OUTER JOIN的目的是返回所有匹配的行以及至少一方表中的非匹配行。 - LEFT JOIN(或LEFT OUTER JOIN)返回左表中的所有行,即使右表中没有...

    关于sql的left join,right join,inner join,outerjoin

    本篇文章将深入探讨四种基本的JOIN类型:LEFT JOIN(左连接)、RIGHT JOIN(右连接)、INNER JOIN(内连接)以及OUTER JOIN(外连接)。我们将详细解释这些概念,它们的工作原理以及在实际数据库操作中的应用。 1. ...

    oracle-join用法

    在Oracle SQL中,Join主要分为几个类型,包括INNER JOIN、LEFT JOIN (LEFT OUTER JOIN)、RIGHT JOIN (RIGHT OUTER JOIN)以及FULL JOIN (FULL OUTER JOIN)。这些类型在Java编程中同样可以使用,通过SQL查询语句来实现...

    MySQL JOIN 语法说明与 INNER JOIN 语法用法实例.docx

    本文档详细介绍了 MySQL 中的 JOIN 语法,包括 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN 等,并提供了实际的实例来说明 JOIN 的用法。 首先,MySQL 的 JOIN 语法用于根据两个或多个表中的字段之间的关系,从...

    SQL中的left outer join,inner join,right outer join用法详解

    在关系代数的形式化语言中,用表或者数据集合表示关系或者实体,用行表示元组,用列表示属性。关系代数包含以下 8 个关系运算符: 1. 选取――返回满足指定条件的行。 2. 投影――从数据集合中返回指定的列。 3. ...

    SQL语句inner join,left join ,right join连接的不同之处

    在SQL语言中,连接(Join)操作是一种非常重要的数据整合方式,主要用于从两个或多个表中提取数据。根据连接方式的不同,可以分为多种类型,包括内连接(Inner Join)、左连接(Left Join)以及右连接(Right Join)...

    Mysql之innerjoin,leftjoin,rightjoin详解.pdf

    inner join 还有一种写法,即使用逗号分隔两个表名,然后在 WHERE 子句中指定连接条件。例如: SELECT * FROM `xs`, `cj` WHERE xs.id = cj.id 这两种写法是等价的,都是等值连接。 inner join 的应用 inner ...

    用C#实现对DataTable的JOIN,GROUP BY,FILTER,UNIONALL,DISTINCT

    用C#实现对DataTable的JOIN,GROUP BY,FILTER,UNIONALL,DISTINCT

    mysql Join使用以及优化

    4. 考虑适当分批处理大表的Join操作,特别是在高并发情况下,以减少资源争用。 总之,合理使用和优化MySQL中的Join操作需要综合考虑表结构、索引设计、查询需求和硬件资源等多方面因素。通过实践和反复调优,DBA和...

    hadoop Join代码(map join 和reduce join)

    Hive和Pig都支持多种JOIN类型,如LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN等,并且能够自动优化JOIN策略。 Hive示例: ```sql SELECT a.*, b.* FROM table_a JOIN table_b ON (a.join_field = b.join_field); `...

    SQL连接JOIN例

    本文将详细介绍五种主要的`JOIN`类型:左连接(`LEFT JOIN`/`LEFT OUTER JOIN`)、右连接(`RIGHT JOIN`/`RIGHT OUTER JOIN`)、全连接(`FULL JOIN`/`FULL OUTER JOIN`)、内连接(`INNER JOIN`/`JOIN`)以及交叉连接(`...

    SQL中JOIN的使用详解

    本文将详细介绍五种主要的`JOIN`类型:`CROSS JOIN`、`LEFT JOIN`、`RIGHT JOIN`、`INNER JOIN`、`SELF JOIN`以及`FULL JOIN`。 #### 1. CROSS JOIN (交叉连接) `CROSS JOIN`也称为交叉连接,它的作用是返回两个表...

Global site tag (gtag.js) - Google Analytics