大神帮忙优化下这个查询语句,数据库:Oracle,语句如下

0
这个是ORACLE的一个查询语句
select * from
(
  select * from t1
  left t2
   ......
  left t10
  union all
  select * from t1
  left t2
  ......
  left t5
)   ta
where ta----条件
因为报表平台的限制,只能添加一个时间筛选,所以需要把两个表union起来,然后在大表外查询,但是这样很慢,我测试了,如果不用外面这个嵌套,把条件放到里面的两个表取,就会比较快!能有大神帮忙分析下吗?里面有一张表上亿的数据;
不知道各位大神有没有想过嵌套之类的查询时间的计算相关的知识,求指教!
已邀请:
1

seng - 从事BI、大数据、数据分析工作 2015-10-14 回答

union all基本是很难优化了, 执行计划一般不会吧条件放入每个查询里面的。
自己写的语句就把条件放到union all的每个语句里面把。
如果使用bi工具的修改逻辑层(如OBIEE设置多个数据源),也可以优化的。
0

老头子 - 专注是唯一的捷径 2015-10-14 回答

尝试一下谓词推入,你把sql写全,顺便发下执行计划,加个谓词推入的hint应该就可以解决的
0

- 取是能力,舍是境界 2015-10-15 回答

首先一点,你这个条件可以放在里面,即两个union的查询分别使用条件过滤之后,再纵向联接。
其次,真如你的示例的SQL所示的表都是相同的话,两个SQL是可以合并的,在select 部分做些数据的分别处理,这样应该会好很多。

要回复问题请先登录注册