Zitat:
Zitat von betrazivis
Ohne deine Db-Struktur hier irgendwelche Syntaxfehler aufdecken ist doch völlig sinnlos, oder? Der Query sieht aber schon besser aus.
Nimm dir das was Jan gesagt hat zu Herzen. Ich weiß nicht wie groß deine Datenbank ist, denke aber wenn sie mal eine stattliche Größe(so 100-* mb) erreicht hat und du versuchst solche Berechnungen durchzuführen wird mySQL irgendwann anfangen zu swappen und dann geht dein ganzer Server, egal wieviel Ram der hat in die Knie.
Ich hab das Dilemma gerade hinter mir.
|
warum ist das sinnlos? Um Syntaxfehler aufzudecken, braucht man meiner Meinung nach keine DB-Struktur
Ok, Group by versuche ich mal zu entfernen. Aber das an Jan's Post habe ich garnicht so richtig verstanden. Ich muss doch bei jedem Auslesen die Summe der Votes durch die Summe der Stimmen teilen, um den Durchschnitt zu bekommen. Wie soll ich das denn anders machen?
oO Was mir grad auffällt: Meine DB hat grad mal 1 MB
genial
Naja, ich denke es ist trotzdem gut, wenn ich jetzt schon optimiere, sodass ich später nicht unter Zeitdruck gerate
Edit: Ok, mein Query sieht nun so aus:
Code:
EXPLAIN
SELECT
e.id,
c.name,
c.name as cat_name,
c.id as catid,
e.freigeschaltet,
e.beschreibung,
e.poster,
e.poster_hp,
e.hits,
(sum(v.vote)/count(v.vote)) as roundedRating
FROM
link_entries e
JOIN link_cats AS c
ON e.cat_id = c.id
JOIN link_voting AS v
ON e.id = v.link_id
WHERE
e.flag = 1
AND e.freigeschaltet < 1142353931
AND c.id = 3
GROUP BY
e.id
ORDER BY
freigeschaltet desc
LIMIT
0, 30
Ich habe Indexe auf e.freigeschaltet, e.flag und auf v.link_id, c.id, e.cat_id, gesetzt. Das macht Sinn, da dieser Query mit am häufigsten benutzt wird, oder?
Im Moment merke ich aber keinen Unterschied zu der Variante mit Where (wenn ich mir die Ausführungszeit in PhpMyAdmin anschaue). Ist das normal, liegt das an der kleinen Datenmenge und wird der Join Vorteile gegenüber dem Query mit where haben, sobald die Datenbestände größer sind?