如何使sql查询工作得更快

如何使sql查询工作得更快,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,上述查询需要15分钟来获取数据。 有谁能帮助我如何使它运行得更快吗?有20万行要比较,您必须确保不执行嵌套循环: select * from student@LINK1 where id in(select id from classs@LINK1 where a_id in (select id from desk@LINK1 where USN in (1,2,3,4,5,6))) and id not in

上述查询需要15分钟来获取数据。
有谁能帮助我如何使它运行得更快吗?

有20万行要比较,您必须确保不执行嵌套循环:

select * from student@LINK1 
where id in(select id from classs@LINK1 where a_id in 
             (select id from desk@LINK1 where USN in (1,2,3,4,5,6)))
               and id not in 
                 (select id from student where id in 
                   (select id from classs where a_id in 
                     (select id from desk where USN in (1,2,3,4,5,6))));
编辑:在阅读了评论之后,我认为有必要重写查询:

select /*+use_hash(remot local)*/
    remot.*
from (
     select * from student@LINK1 
     where id in(select id from classs@LINK1 where a_id in 
                   (select id from desk@LINK1 where USN in (1,2,3,4,5,6)))
     ) remot
left join
      (select id from student where id in 
             (select id from classs where a_id in 
                     (select id from desk where USN in (1,2,3,4,5,6)))
      ) local
on local.id = remot.id
where local.id is null;

因为它将超过一些连接。此查询中的not in也可以重写为left join。

学生选择id中有多少行,班级选择id中有多少行,桌面选择id中有多少行,USN在1,2,3,4,5,6中有多少行?有189883行,链接上有多少行?从中选择idclasss@LINK1其中,select id from中的_iddesk@LINK1USN在1,2,3,4,5,6中的位置?在where子句中使用的所有列上都有索引吗?另外,使用left join可能会快一点这需要更多的时间远程查询需要多少时间?我的意思是:从中选择*student@LINK1在何处插入id从中选择idclasss@LINK1其中,select id from中的_iddesk@LINK1USN在1,2,3,4,5,6中的位置,你不会让它工作超过5分钟。你得到了多少行?189803行我得到了非常感谢你花时间帮助我。
select * 
from student@LINK1 
where id in 
   (
     select id 
     from classs@LINK1 
     where a_id in 
              (select id from desk@LINK1 where USN in (1,2,3,4,5,6))
           and id not in
                    (select id from classs where a_id in 
                       (select id from desk where USN in (1,2,3,4,5,6))
    )
;