Ich habe eine Tabelle namens Benutzer mit etwa 250.000 Datensätze darin. Ich habe eine andere Tabelle namens Staging mit rund 75.000 Datensätzen. Staging hat nur eine Spalte, msisdn. Ich möchte überprüfen, wie viele Zeilen in der Staging nicht vorhanden in Benutzern sind.MySQL JOIN Query, die viel zu lange dauert zu vervollständigen
Ich habe die folgende Abfrage, die ich auf einem kleinen Teildatenmenge getestet haben, und es scheint gut zu funktionieren:
SELECT
s.*
FROM staging s
LEFT OUTER JOIN users u ON u.msisdn=s.msisdn
WHERE u.msisdn IS NULL
Das Problem jedoch ist, wenn ich versuche, diese Abfrage auf die volle Liste zu laufen von 250k Benutzern. Es lief für eine Stunde, bevor ich es aufhörte. Gibt es eine Möglichkeit, diese Abfrage zu optimieren?
SELECT
s.*
FROM staging s
LEFT OUTER JOIN users u ON u.msisdn=s.msisdn
WHERE u.msisdn IS NULL
LIMIT 0,10000
msisdn ist der Primärschlüssel der Staging-Tabelle, aber es ist nicht der Primärschlüssel der Tabelle: die Abfrage auf Teilmengen der Daten in Staging ausgeführt wird, aber das ist schrecklich manuelles
Ich habe begonnen Benutzer. Ich weiß nicht, ob das wichtig ist.
Bitte führen Sie Ihre Anfrage durch EXPLAIN und veröffentlichen Sie das Ergebnis. Sind beide msisdn Spalten indiziert? Wenn dies der Fall ist, führen Sie OPTIMIZE TABLE für beide Tabellen aus. –