oracle sql中的"哪里不存在"vs"左外连接"

Ion*_*n C 1 sql oracle

我有一个简单的SQL查询:

SELECT  
       columnA, columnB, columnC...  
 FROM  
       (SELECT    
             columnA, columnB, columnC...  
        FROM   
              SomeTable) Table1  
  WHERE NOT EXISTS  
        (SELECT   
               columnA  
          FROM  
               SomeOtherTable st  
          WHERE  
               st.columnB = Table1.columnB)
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一个建议如何重写此查询以获得更好的性能?我的意思是WHERE NOT EXISTS在表1中包含该子句.

Dan*_*rth 5

你可以用这个:

select Table1.*
from (select * from SomeTable) Table1
left outer join SomeOtherTable sot
    on Table1.columnB = sot.columnB
where sot.columnB is null;
Run Code Online (Sandbox Code Playgroud)

对于性能,columnB在两个表上都有索引很重要.