Wenn Sie versuchen, Ihre Daten zu optimieren und zu kennen, können Sie durch Hinzufügen der Klausel "STRAIGHT_JOIN" die Leistung enorm verbessern. Sie haben einen inneren Join ON... Nur zur Bestätigung: Sie wollen nur Datensätze, bei denen Tabelle1 und Tabelle2 verbunden sind, aber nur für Tabelle 2 ist die Mitgliedsnummer ID = ein bestimmter Wert... in diesem Fall 4.
Ich würde die Abfrage dahingehend ändern, dass Tabelle 2 die primäre Tabelle des Selects ist, da sie eine explizite "member_id" hat, die durch einen Index zur Begrenzung der Zeilen optimiert werden könnte, und dann wie folgt mit Tabelle 1 verbunden werden
select STRAIGHT_JOIN
t1.*
from
table2 t2,
table1 t1
where
t2.member_id = 4
and t2.col1 = t1.col2
Die Abfrage würde also nur die member_id = 4 Datensätze vorqualifizieren und dann einen Abgleich zwischen Tabelle 1 und 2 vornehmen. Wenn also Tabelle 2 50.000 Datensätze und Tabelle 1 400.000 Datensätze enthält, wird Tabelle 2 zuerst verarbeitet. Begrenzung der ID = 4 noch weniger, und noch weniger, wenn mit Tabelle 1 verbunden.
Ich weiß mit Sicherheit, dass straight_join funktioniert, da ich es viele Male implementiert habe, wenn ich mit Regierungsdaten von mehr als 14 Millionen Datensätzen zu tun hatte, die mit mehr als 15 Nachschlagetabellen verknüpft waren, bei denen die Maschine verwirrt war, weil sie versuchte, für mich an die kritische Tabelle zu denken. Eine solche Abfrage dauerte über 24 Stunden, bevor sie hängen blieb... Durch das Hinzufügen von "STRAIGHT_JOIN" und das Setzen von Prioritäten für die "primäre" Tabelle in der Abfrage wurde eine korrekte Ergebnismenge in weniger als 2 Stunden erzielt.