我成功查询了这个:
SELECT * FROM tableA
WHERE NOT (column1 IN
(SELECT column1 FROM tableB) AND columnDate='9999-12-31');
tableA
有大约35000k(3500万)个记录,tableB
有5k(5千)。
我会在不到5分钟的时间内检索tableA
除tableB
以外的所有记录。
问题是当我尝试(使用相同记录卷的另一个示例)使用3列(键)获得相同的结果时:
SELECT * FROM tableA
WHERE NOT (column1 || column2 || column3 IN
(SELECT column1 || column2 || column3 FROM tableB) AND columnDate='9999-12-31');
我在1小时40分钟内检索tableA
除tableB
以外的所有记录....!
我可以更有效地查询吗?
答案 0 :(得分:2)
SELECT * FROM tableA a
WHERE NOT EXISTS
(SELECT null FROM tableB where a.column1=column1 and a.column2=column2 and a.column3=column3)
AND columnDate<>'9999-12-31'
答案 1 :(得分:0)
一种方法是过滤左连接:
select *
from tableA a
left join
tableB b
on b.col1 = a.col1
and b.col2 = a.col2
and b.col3 = a.col3
where a.columnDate <> '9999-12-31'
and b.id is null -- No match found in B