Geschwindigkeit bei NestedSets abfrage
Michael
- datenbank
0 1UnitedPower0 ChrisB
Also ich versuche meine Kategorien über 10.000 an der Zahl meinen Beiträgen zuzuordnen.
Es geht, aber die Perfomence ist unter aller S..
Meine Beiträge sind in der Tabelle beitrag vorhanden, dort gibt es auch die Spalte cat. die wiederrum aus der Tabelle Kategorie die einzelnen Katgorie holt.
Also habe ich es so gelösst (53 Sekunden)
SELECT a.titel FROM beitrag a
WHERE
kat IN
(
SELECT o.id
FROM
kategorien AS n,
kategorien AS p,
kategorien AS o
WHERE
o.lft BETWEEN p.lft AND p.rgt
AND o.lft BETWEEN n.lft AND n.rgt
AND n.id = 10
GROUP BY o.lft
)
ORDER BY a.date DESC LIMIT 10
wenn ich aber vorher die Netset abfrage und dann in einem zweiten Anlauf ausgebe:
SELECT a.titel FROM beitrag a
WHERE
cat IN
(
10,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,201,202,203,205,206,207,208,209,210,212,211
)
ORDER BY a.date DESC LIMIT 10
sind es nur 0.0030 Sekunden
WO habe ich den meinen Fehler, der das alles so verlangsamt?
Meine Herren!
wenn ich aber vorher die Netset abfrage und dann in einem zweiten Anlauf ausgebe:
[…]
sind es nur 0.0030 Sekunden
Wirklich interessant wäre gewesen, wie lange das Subquery braucht, dieses wird nämlich für jede Zeile in "beitrag" einmal ausgeführt.
„dependent subquery“ ist das Stichwort.
Die MySQL-Doku bietet bereits einen Artikel für Optimierung derartiger Probleme: http://dev.mysql.com/doc/refman/5.0/en/subquery-optimization-with-exists.html
Viel mehr kann ich dir auch nicht sagen, das ist ein Fall für die MySQL-Gurus.
Hi,
WO habe ich den meinen Fehler, der das alles so verlangsamt?
Die erste und pauschale Rückfrage bei solchen Fragen:
Welche Indexe hast du gesetzt, und was sagt EXPLAIN über dein Statement?
MfG ChrisB