【发布时间】:2015-06-23 11:06:16
【问题描述】:
我希望有人可以解释连接多个表与使用 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 作为回答,因为我真的对这两种情况感到好奇。
【问题讨论】:
-
这些查询是不等价的。你能发布一个更现实的例子吗?
标签: sql oracle join oracle10g sql-except