Ich habe etwas Ähnliches wie die folgenden:Was würde dazu führen, dass eine Abfrage bei Verwendung einer Unterabfrage langsam ausgeführt wird, aber nicht bei einer separaten Ausführung?
SELECT c.id
FROM contact AS c
WHERE c.id IN (SELECT s.contact_id
FROM sub_table AS s
LEFT JOIN contact_sub AS c2 ON (s.id = c2.sub_field)
WHERE c2.phone LIKE '535%')
ORDER BY c.name
Das Problem ist, dass die Abfrage eine sehr sehr sehr lange Zeit in Anspruch nimmt (> 2 Minuten), aber wenn ich die Unterabfrage nehmen, führen Sie es separat, implodieren die IDs und Fügen Sie sie in die Hauptabfrage ein, sie läuft in weniger als 1 Sekunde, einschließlich der Datenwiederherstellung und Implosion.
Ich habe überprüft, erklärt auf beiden Methoden und Schlüssel werden entsprechend und auf die gleiche Weise verwendet. Die Unterabfrage gibt nicht mehr als 200 IDs zurück.
Was könnte dazu führen, dass die Unterabfrage so lange dauert?
BTW, ich weiß, dass die obige Abfrage mit Joins geschrieben werden kann, aber die Abfrage, die ich habe, kann nicht sein - das ist nur eine vereinfachte Version.
Verwenden von MySQL 5.0.22.
Können Sie vielleicht die genaue Version des von Ihnen verwendeten MySQL-Servers angeben? –
Danke, jetzt kommen wir irgendwohin. Ich laufe 5.0.24 auf einem von mir, so nahe genug. Überprüfen einiger Testfälle, um zu sehen, ob der 6.0-Alpha-Bug dort auch vorhanden war. –
... anscheinend nicht. Ungerade.Können Sie trotzdem die Beispielabfragen (und Problemumgehungen) in diesem Bugreport auf Ihre Anfragen überprüfen? Ihr Beispiel scheint fast identisch mit dem Bericht zu sein, auf dem der Optimierer krächzt. –