我有一个简单的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)
有人可以给我一个建议如何重写此查询以获得更好的性能吗?我的意思是在表1中包含WHERE NOT EXISTS
子句。
答案 0 :(得分:5)
您可以使用:
select Table1.*
from (select * from SomeTable) Table1
left outer join SomeOtherTable sot
on Table1.columnB = sot.columnB
where sot.columnB is null;
对于性能,在两个表上都有columnB
上的索引很重要。
答案 1 :(得分:0)
这个怎么样:
SELECT columnA, columnB, columnC...
FROM SomeTable
WHERE (SELECT COUNT(*) FROM SomeOtherTable st WHERE st.columnB = SomeTable.columnB)=0;