2015-08-20 54 views
-2

我用多个视图来使用子查询和联合来获取两列,我想减少这个执行时间。选择两列:多视图,相同的条件

select a.empid,empname from 
(select empid,empname from india_emp where deptno <> 10 
union 
select empid,empname from us_emp where deptno <> 10 
union 
select empid,empname from uk_emp where deptno <> 10 
union 
select empid,empname from uae_emp where deptno <> 10 
union 
select empid,empname from brazl_emp where deptno <> 10 
union 
select empid,empname from chine_emp where deptno <> 10 
union 
select empid,empname from jpn_emp where deptno in (54,256,362,9879,24,46) 
)a 
where a.empid NOT IN(105,202,11,45,695,646,726,8465,965,56,646,689,446) 
order by 2 
+2

张贴执行计划 – Matt

+2

有没有什么可以继续下去。针对同一个基表的观点是什么?是否有任何单个查询比其他查询慢?执行计划是否显示出瓶颈?它是否使用了适当的索引?统计信息是否最新?等等......缩短执行时间也是一个非常模糊的目标。 –

+0

我是新的Oracle DBA,这是我的第一个SQL查询优化,我看到执行计划,但我不明白真的很好,我只理解这个上面的查询使用全扫描表,我已经创建索引在主表,然后创建不同的许多之后的意见,我选择他的数据,但其执行时间是04.52秒和225条记录,我想减少这个执行时间,但不知道如何?所以如果你能告诉我如何减少?给我的方式或任何建议..预先感谢提供快速响应... –

回答

0

更改所有UnionUnion All,这是更便宜。

像这样:具有派生表内EMPID过滤

SELECT a.empid,empname FROM 
(SELECT empid,empname FROM india_emp WHERE deptno <> 10 
UNION ALL 
SELECT empid,empname FROM us_emp WHERE deptno <> 10 
UNION ALL 
SELECT empid,empname FROM uk_emp WHERE deptno <> 10 
UNION ALL 
SELECT empid,empname FROM uae_emp WHERE deptno <> 10 
UNION ALL 
SELECT empid,empname FROM brazl_emp WHERE deptno <> 10 
UNION ALL 
SELECT empid,empname FROM chine_emp WHERE deptno <> 10 
UNION ALL 
SELECT empid,empname FROM jpn_emp WHERE deptno in (54,256,362,9879,24,46) 
)a 
WHERE a.empid NOT IN(105,202,11,45,695,646,726,8465,965,56,646,689,446) 
ORDER BY 2 
+0

我已经把联盟所有,但不是好的作品,它只有10毫秒减少 –

0

可以尝试瘦身?

select a.empid,empname from 
(select empid,empname from india_emp where deptno <> 10 and empid NOT IN(105,202,11,45,695,646,726,8465,965,56,646,689,446) 
union 
select empid,empname from us_emp where deptno <> 10 and empid NOT IN(105,202,11,45,695,646,726,8465,965,56,646,689,446) 
union 
select empid,empname from uk_emp where deptno <> 10 and empid NOT IN(105,202,11,45,695,646,726,8465,965,56,646,689,446) 
union 
select empid,empname from uae_emp where deptno <> 10 and empid NOT IN(105,202,11,45,695,646,726,8465,965,56,646,689,446) 
union 
select empid,empname from brazl_emp where deptno <> 10 and empid NOT IN(105,202,11,45,695,646,726,8465,965,56,646,689,446) 
union 
select empid,empname from chine_emp where deptno <> 10 and empid NOT IN(105,202,11,45,695,646,726,8465,965,56,646,689,446) 
union 
select empid,empname from jpn_emp where deptno in (54,256,362,9879,24,46) 
)a 
where 
order by 2 
+0

如果Oracle认为它会帮助自动推断谓词。 –

+0

我使用但不工作,我曾经喜欢你说写上面的类型查询写它的增加执行时间..谢谢你的建议,但没有工作.. –