OK, ich habe das mit über 30.000 Datensätzen pro Tabelle getestet und es läuft verdammt schnell.
So wie es derzeit aussieht, führen Sie derzeit einen Join an zwei riesigen Tischen durch, aber wenn Sie zuerst in jedem Tisch nach Übereinstimmungen auf 'val' suchen, wird dies die Größe Ihrer Join-Sets erheblich reduzieren.
Ich habe diese Antwort ursprünglich als eine Reihe von Unterabfragen gepostet, aber mir war nicht klar, dass MySQL bei verschachtelten Unterabfragen schmerzhaft langsam ist, da es von außen nach innen ausgeführt wird. Wenn Sie jedoch die Unterabfragen als Ansichten definieren, werden sie von innen nach außen ausgeführt. P>
Erstellen Sie also zuerst die Ansichten.
CREATE VIEW tbl1_iii AS (
SELECT * FROM tbl1 WHERE val='iii'
);
CREATE VIEW tbl2_iii AS (
SELECT * FROM tbl2 WHERE val='iii'
);
Führen Sie dann die Abfrage aus.
SELECT tbl1_iii.id from tbl1_iii,tbl2_iii
WHERE tbl1_iii.id = tbl2_iii.id;
Blitz.