我希望有人可以解释加入多个表与使用 MINUS 消除记录的性能。我查看了其他一些堆栈溢出问题,但没有看到我在寻找什么。
我认为这两个查询会产生相同的输出,而且我一直听到“使用连接,使用连接!”,特别是从 stackoverflow 帖子中,他们预计会更快......
这是我运行的第一个查询,我认为它会慢得多,但运行只需几分钟...
select some_id
from table1
MINUS
select some_id
from table2
where table2.value = 'some_value'
MINUS
select some_id
from table3
where table3.value = 'some_value'
group by some_id
这是我认为会更快的第二个查询,但它现在已经运行了 3 个多小时(看不到尽头?)
select some_id
from table1
join table2 on table1.id=table2.id
join table3 on table1.id=table3.id
where table2.value = 'some_value'
or table3.value = 'some_value'
group by some_id
我应该注意所有 3 个表都有 > 100 万条记录,每个记录多达 1500 万条。
编辑:
抱歉 - 我的意思是让你知道我避免在这个问题中使用 NOT EXISTS 作为回答,因为我真的对这两种情况感到好奇。