Ich brauche eine Verbesserung dieser SQL UPDATE-Abfrage. Die Abfrage muss nur die erste Zeile aktualisieren, aber ich nehme an, dass sie beim Durchlaufen aller Zeilen und beim Ausführen der Unterabfrage für alle Zeilen sehr viel Energie verbraucht, da sie bei großen Datenbanken sehr langsam ist. Irgendwelche Vorschläge?Verbesserung von SQL UPDATE
UPDATE leads l
SET status='processing', processor='$processor'
WHERE pool IN ($pools) AND status='active'
ORDER BY (SELECT count(*) FROM calls c WHERE c.lead = l.id), id ASC
LIMIT 1
UPDATE
Die Langsamkeit in der Tat durch die subselect verursacht wird. Typisch sind 2000-3000 Treffer in der Lead-Tabelle. Der einfachste Weg wäre, eine Spalte in der Leads-Tabelle einzubauen, die Aufrufe manuell zählt, so dass ich den Subselect nicht benötige, aber es ist eine laufende Site, an der diese Änderungen vorgenommen werden müssen, so dass es die Reihenfolge durcheinander bringen würde Ich habe die Spalte jetzt hinzugefügt.
Aber ich denke, es ist der einzige Weg, um den großen Subselect zu vermeiden.
Es klingt wie Sie eine sind vermisst Index? Setzen Sie 'EXPLAIN' vor Ihre Abfrage, um zu sehen, was es tut ... –
probiert' EXPLAIN EXTENDED UPDATE ... '? EXPLAIN EXTENDED gibt weitere Informationen darüber, was genau beim Ausführen der UPDATE-Abfrage passiert. –