【发布时间】:2018-07-24 03:55:17
【问题描述】:
我有一个过于复杂的查询,其中包含一个内联视图,其中包含一个分组依据,出于性能原因,我希望尝试将其删除,但我似乎想不出这样做的方法。此查询的过度简化表示是:
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 仅包含 inline 包含的 id 的一小部分,但它是一对多的关系。因为 inline 包含一个 group by,优化器必须先对表中的每一行求和,然后才能加入。这使得这个子查询代表了工作估计成本的 99%。
由于选择使用内联的 2 个值,我不认为将子查询更改为嵌套子查询或标量子查询是一种选择。我还考虑过移动组以包含整个查询,但是我知道的每个聚合函数都会导致everythingElse.* 花费的时间比我通过删除内联视图节省的时间要多。我能找到的最快的处理方法是 max(),但如果存在类似 any() 的东西,那可能会解决我的问题。
我是否缺少某种明显的解决方案,或者我是否只需要处理 1% 的查询占用 99% 的处理时间这一事实?
【问题讨论】:
标签: oracle group-by subquery sql-tuning inline-view