我有三个表,T1(C1,C2)
,T2(C1,C2)
,T3(C1,C2)
,我想从T1
中选择只出现在T1
而不是T2
的行{1}},T3
。
现在我只使用left join
来执行此操作。
SELECT C1,C2
FROM T1
LEFT JOIN T2 ON T1.C1=T2.C2 AND T1.C2=T2.C2
LEFT JOIN T3 ON T1.C1=T3.C2 AND T1.C3=T2.C2
WHERE T2.C1 IS NULL AND T3.C1 IS NULL;
但问题是,如何在数据库非常大时提高性能(例如,三个表中的行数> 10000000)。使用LEFT JOIN
查询需要太长时间......
答案 0 :(得分:0)
立即想到的三件事是: - 用于连接的字段的索引 - 仅选择您真正需要的数据 - 为数据库服务器提供大量内存
答案 1 :(得分:-1)
子查询可以帮到你。您可以通过这种方式节省左连接的额外费用。
SELECT
C1,C2
FROM
T1
WHERE
C1 NOT IN (
SELECT C1 FROM T2
UNION ALL
SELECT C1 FROM T3
);