Zitat von
3_of_8:
Ich hätte gemeint, man könnte den Subquery irgendwie durch eine GROUP BY-Klausel ersetzen, aber wenn es ohne den Subquery nicht geht, ist das auch kein Problem.
Hi,
ich würde Dir hier zustimmen, dass eine Unterabfrage das ganze
vielleicht schneller machen könnte. Sicher bin ich mir nicht, kommt wohl unter anderem auf die Anfrageoptimierung an, aber so an sich könnte man die Selektion in eine verschachtelte Anfrage überführen, wobei die innere Anfrage nicht mit der äußeren korreliert. Damit sollte die innere Anfrage einmalig ausgeführt werden und das könnte (wie gesagt, bin nicht sicher) viel effizienter ablaufen als die unverschachtelte Anfrage. Da sollte man einfach mal testen, was schneller läuft.
Was ich meine ist etwas in der Richtung:
SQL-Code:
UPDATE ni_categories c
SET c.articles = SELECT ac.articleCount
FROM (SELECT a.catid, COUNT(a.articleid) as articleCount
FROM ni_articles a
GROUP BY a.catid) ac
WHERE ac.catid = c.catid
Hier sollte (wenn ich mich nicht irre) die innere Abfrage nur einmalig ausgeführt werden und die Selektionen auf deren Auswertung geht dann recht flink. Im Einzeiler würde im Worst-Case ein kompletter Durchlauf für jede catid nötig sein, so was dann zu einer deutlich höheren Laufzeit führt (wenn die Datenmenge groß genug ist).
Ich denke mal, Du meintest auch etwas in der Richtung?
Gruß Der Unwissende