大神帮忙优化下这个查询语句

osqinning 2015-09-18 08:23:38
这个是ORACLE的一个查询语句
select * from
(
select * from t1
left t2
......
left t10
union all
select * from t1
left t2
......
left t5
) ta
where ta----条件
因为报表平台的限制,只能添加一个时间筛选,所以需要把两个表union起来,然后在大表外查询,但是这样很慢,我测试了,如果不用外面这个嵌套,把条件放到里面的两个表取,就会比较快!能有大神帮忙分析下吗?里面有一张表上亿的数据;
不知道各位大神有没有想过嵌套之类的查询时间的计算相关的知识,求指教!
...全文
151 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
美到心痛 2015-09-23
  • 打赏
  • 举报
回复
你的意思应该是时间筛选只能放在嵌套外吗?这个时候只能试着通过写法的修改,把外层的过滤提前传递到嵌套内.
xiaobluesky 2015-09-19
  • 打赏
  • 举报
回复
条件在里面快的原因是先过滤了条件,会走索引等等,再union,结果集小,查的自然快。 而先union再查,是无条件union两张表放内存,再用条件进行筛选,而union后,外表查询无法利用索引等等,自然慢。。
惑先生 2015-09-19
  • 打赏
  • 举报
回复
select * from
(
select * from t1
left t2
......
left t10
where ----条件
union all
select * from t1
left t2
......
left t5
where ----条件
) ta

这样不行吗?

3,493

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧