Also habe ich gerade eine neue mySQL-Datenbank mit zwei Haupttabellen, BigTable [600.000 Zeilen] und LilTable [8000 Zeilen] begonnen. Es gibt ein Feld blId, das die Tabellen verbindet, die in bigTable indiziert wurden.Extrem langsame verschachtelte mySQL-Abfrage
Ich möchte alle Einträge aus der BigTable, die eine BlId mit einem Eintrag aus der LilTable teilen, die bestimmte Kriterien erfüllt, aber ich brauche keine anderen Informationen aus dieser Tabelle, so scheint eine Verknüpfung übermäßig.
Ohne weitere Umschweife, hier ist mein schrecklich langsam query:
SELECT * FROM testdb.bigTable where blId in
(SELECT blId FROM certtest.lilTable WHERE color LIKE 'blue');
Dieser Vorgang dauert ~ 52 Sekunden auf meinem Computer ausführen kann, und dauerte noch 50 Sekunden, wenn die innere Abfrage 0 Treffer! Im Gegensatz dazu, wenn ich die innere Abfrage separat ausführe und manuell eine Liste von akzeptablen BlIds erstelle, die ich anstelle der Unterabfrage anbringe, läuft sie in weniger als einer Zehntelsekunde. Was in den blauen Flammen geht hier vor?
Edit: Also ich habe eine Möglichkeit gefunden, es zu beschleunigen, wickeln Sie es in eine andere, redundante Select-Anweisung? (Verringert die Abfragezeit auf 0,25 Sekunden.) Jeder könnte dieses Verhalten erklären, es würde sehr geschätzt werden.
SELECT * FROM testdb.bigTable where blId in
(SELECT * FROM
(SELECT blId FROM certtest.lilTable WHERE color LIKE 'blue') AS why
);
Müssen Sie 'LIKE' im SQL verwenden? Wäre es schneller, wenn Sie zu 'color = 'blue' wechseln würden? Bitte Tabellenstruktur einfügen. –
Haben Sie in den Tabellen Indizes definiert? Wie groß sind die Tische? Warum wie verwenden? – ChuckCottrill