今天早上到公司,发现一个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 VB2010源码
inner join、 left join 、right join、 outer join之间的区别
SQL中大概有这么几种JOIN:cross joininner joinleft outer joinright outer joinfull outer join他们都是基于cross join(笛卡尔乘积),举例说明
Join on/inner join on/full join on/full outer join on/left join on/right join on/cross join on; 在使用jion时,on和where条件的区别;
SQL语句inner join,left join ,right join连接的不同之处, 非常实用
表的数据有:一、内连接-inner jion :最常见的连接查询可能是这样,查出学生的名字和成绩:[sql] view plain copy select s.
详细说明JOIN的用法,包括LEFT JOIN、RIGHT JOIN、INNER JOIN、SELF JOIN、FULLJOIN
文章目录SQL 连接(JOIN)不同的 SQL JOINSQL INNER JOIN 关键字SQL LEFT JOIN 关键字SQL RIGHT JOIN 关键字SQL FULL OUTER JOIN 关键字 SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来。 下图展示了 ...
1 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN(MySQL 不支持)、CROSS JOIN 这是在网上找到的非常好的一篇博文,图解 join 语句: CODING HORROR-A Visual Explanation of SQL Joins 下图可以很清楚的明白,join ...
我也是别人问起,才查找资料看了下,跟自己之前的认识差不多,如果你使用join连表,缺陷的情况下是inner join,另外,开发中使用的left join和right join属于outer join,另外outer join还包括full join.下面我通过...
sql语句出现如下情况的特殊处理:当两张表里的记录通过某一列关联,如果需要取得并集,即所有不重复的记录,则用全关联。
The Full Stack Developer
这三者的区别很多人都应该不是很清楚,包括我自己,下面我们一起来看看,如果你使用join连表,缺陷的情况下是inner join,另外,开发中使用的left join和right join属于outer join,而outer join还包括full join....
无论如何,Full Convert是目前转换数据库最简单,最有效的方法(包括简单的数据副本和复杂的自定义要求),并为经常需要在不同数据库引擎之间导入和导出数据库文件的用户提供完整的,一个 - 停止软件解决方案
Full_Webpack-45.4.2608-IT310_Full_Webpack.exe
fullstack react book, 学习react比较全的书,这是花钱买的
RTX51FULL 库,使用时复制到Keil\C51\LIB下
xlsx.full.min.js
Full_Webpack-1325-DJ1000_J110_Full_Webpack.exe
打印机驱动 LJPro_MFP_M125-126_full_solution_15309打印机驱动 LJPro_MFP_M125-126_full_solution_15309打印机驱动 LJPro_MFP_M125-126_full_solution_15309打印机驱动 LJPro_MFP_M125-126_full_solution_15309...