Einzelnen Beitrag anzeigen
  #13 (permalink)  
Alt 15.03.2006, 15:09
insanic! insanic! ist offline
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 03.11.2005
Beiträge: 175
insanic! befindet sich auf einem aufstrebenden Ast
Standard

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?
Mit Zitat antworten