【发布时间】:2016-10-11 08:39:29
【问题描述】:
我在执行大型查询时遇到问题,其中 oracle 实例的临时表空间空间不足。以下链接是查询。
https://dl.dropboxusercontent.com/u/96203352/Query/title_block.sql
Temp 表空间的大小为 30 GB,出于客户的考虑,我无法进一步扩展其空间。因此,我试图减少排序操作,但一切都徒劳无功。无论如何要优化或减少此查询的排序操作。
在以下链接中放置了 PLAN Table 的统计信息。
https://dl.dropboxusercontent.com/u/96203352/Query/PLAN_TABLE_INFO.txt
由于查询的大小和解释计划在此问题中发布的方式很大,因此我必须在使用链接时分享它。很抱歉给您带来不便。
由于返回的数据存在重复,我无法从 select 语句中删除另一件事。
请帮忙。
【问题讨论】:
-
是否需要区分(和子查询),如果您不执行该步骤,是否有任何改进?您是否考虑过加入
iistentry一次然后旋转(可能手动合并特定于列的条件)以获取单独的列? -
我试过了。但没有明显改善。
-
使用 row_number() 分析函数来避免重复,我认为它会比 distinct 便宜
-
我无法访问文件(保管箱被阻止),您是否在查询中使用 with 子句?
-
是否可以选择创建表而不是视图,然后使用通过一个或多个循环手动收集数据的过程填充表?