ich drei Tabellen haben, T1(C1,C2)
, T2(C1,C2)
, T3(C1,C2)
, und ich möchte Zeilen aus T1
auszuwählen, die in T1
nicht in T2
, T3
treten nur. Jetzt verwende ich einfach die left join
, um dies zu tun.MySQL- 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;
Aber das Problem ist, wie die Leistung zu verbessern, wenn die Datenbank sehr groß ist (z. Reihen> 10000000 in drei Tabelle). Mit LEFT JOIN
die Abfrage zu lange dauert ...
Gibt es Indizes für T1 (C1, C2), T2 (C1, C2) und T3 (C1, C2)? –
Zu lange definieren? Möchten Sie den Ausführungsplan teilen (Profil + erklären)? –
Sie wissen nicht, was der Engpass ist. Wie viele Datensätze werden dadurch erzeugt? Haben Sie 'EXPLAIN' und' profiling' verwendet, um zu sehen, was der Optimierer macht und was MySQL und OS tun, um Ihre Anfrage auszuführen und zu senden? Was bedeutet zu lange? In der IT haben wir Einheiten, um Größe und Zeit zu messen, können Sie ausdrücken, was zu lange in Sekunden bedeutet? – Mjh