首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle Tuning Inline View with group by

Oracle Tuning Inline View with group by
EN

Stack Overflow用户
提问于 2018-07-24 11:55:17
回答 1查看 342关注 0票数 0

我有一个过于复杂的查询,其中包含一个带有group by的内联视图,出于性能原因,我希望尝试删除它,但我似乎想不出一种方法来这样做。这个查询的一个过于简化的表示形式是:

代码语言:javascript
复制
Select inline.totalValue, inline.type, everythingElse.*
From everythingElse,
(Select sum(value) totalValue, type, id
from otherTable
group by type, id) inline
Where everythingElse.id = inline.id

everythingElse只包含内联包含的id的一小部分,但它是一对多关系。因为inline包含group by,所以优化器必须先对表中的每一行求和,然后才能连接。这使得该子查询代表了作业预计成本的99%。

由于select使用的是内联中的2个值,因此我不认为将子查询更改为嵌套子查询或标量子查询是可行的。我还考虑过移动group by以包含整个查询,但我所知道的每个聚合函数都会导致EverthingElse.*花费比删除内联视图节省的时间更多的时间。我能找到的处理速度最快的是max(),但如果存在类似于any()的东西,我的问题可能就解决了。

有没有某种显而易见的解决方案,我没有注意到这一点,或者我只是必须处理1%的查询获得99%的处理时间的事实?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-24 21:37:04

只要您使用的是12c或更高版本,就可以尝试使用cross apply。我不确定它是否会改善你的具体情况,但值得一试。

代码语言:javascript
复制
Select inline.totalValue, inline.type, everythingElse.*
From everythingElse
cross apply
(Select sum(value) totalValue, type, id
from otherTable
where everythingElse.id = otherTable.id
group by type, id) inline
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51490235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档