使用IN条件对于许多设备?任何其他更好的选择

时间:2016-10-13 14:54:02

标签: sql oracle

我想根据某些服务器名称从其中一个表中检索报告。 我得到了近40k服务器的列表。

我将这些设备添加到临时表中,在我的主选择查询中,我使用了以下where条件:

select col1,col2,.... from main table 
join table 2 on ...
join table 3 on ..
join table 4 on ..
join table 5 on ..
join table 6 on ..
where devices in (select devices from temp table) 

注意:有很多表连接主表,因此包含多个连接。(我只读访问数据库)

但是记录似乎太大了,tempdb正在抛出错误,因为临时表空间已经变满了。 我如何获取数据?

我知道我可以一次性使用1000个设备列表获取数据,还有其他建议吗?由于数据量巨大。

1 个答案:

答案 0 :(得分:0)

我会与DBA交谈,看看他们是否可以增加TEMP表空间大小,或者询问pga_aggregate_target的设置是什么,看看是否可以增加。从您的末尾(客户端),您可以将查询切换到EXISTS语句(假设有一个合适的索引加入)。如果这是导致问题的表,EXISTS应该从HASH JOIN(我猜它正在做)切换到带有INDEX的NESTED LOOPS,不需要任何临时空间。您的查询可能运行缓慢(呃)(不确定此语句的最佳解释计划是什么,而不是更深入地查看它),但至少它应该完成。