Mysql-左连接

时间:2017-10-10 12:14:27

标签: mysql

我有三个表,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查询需要太长时间......

2 个答案:

答案 0 :(得分:0)

立即想到的三件事是:     - 用于连接的字段的索引     - 仅选择您真正需要的数据     - 为数据库服务器提供大量内存

答案 1 :(得分:-1)

子查询可以帮到你。您可以通过这种方式节省左连接的额外费用。

SELECT 
C1,C2
FROM  
T1
WHERE
C1 NOT IN (
SELECT C1 FROM T2
UNION ALL
SELECT C1 FROM T3
);