我遇到了FULL OUTER JOIN的问题 查询:
SELECT
count(e.id)
FROM
eligibility e
FULL OUTER JOIN
tr_entry t
ON t.correlation_id2 = e.correlation_id2
OR t.correlation_id = e.correlation_id
WHERE (
(t.correlation_id IS NULL AND t.correlation_id2 IS NULL)
OR
(e.correlation_id IS NULL AND e.correlation_id2 IS NULL)
)
and e.PAIRING_DATE is NULL
AND t.PAIRING_DATE IS NULL
;
查询刚刚停止,我必须重启Oracle。在小数据集上一切正常,但是当数据集很大(资格表中超过100万条记录)时,数据库卡住了。我必须在两个表上使用哪个索引?
答案 0 :(得分:2)
您的评论:
是的,我试图找到tr_entry中没有匹配的所有资格记录
那么为什么要进行全外连接?这是没有意义的。您应该使用NOT EXISTS
子句:
select *
from eligibility e
where not exists
(
select *
from tr_entry t
where t.correlation_id = e.correlation_id
or t.correlation_id2 = e.correlation_id2
);
我不知道pairing_date
列是如何发挥作用的,所以只需将它们放入查询中即可: - )