|
||||
Bei mir musst du zwei Tupel auslesen und sie (z.B. in PHP) durcheinander teilen.
Du summierst zur Zeit alle Votes und teilst du die Anzahl aller Votes bei jedem Aufruf - überleg mal was performanter ist! Außerdem: Wie willst du das anders lösen? Denn wenn du den aktuellen Vote bereits hineinschreibst kriegst du Fehler beim erneuten Voten. Beispiel: 9 Leute voten für 5 Punkte, danach votet einer für 0 Punkte. Mein Weg: Votes: 10 Votesum: 45 -> Vote = 4.5 Anders: 9 * 5 -> 5 0 -> 5+0 / 2 = 2.5 -> Vote = 2.5 Ich hoffe, du verstehst, weshalb ich das so vorgeschlagen habe.
__________________
Bitte keine PN's - schreibt mir ne anständige Mail oder sprecht mich über Msn / Icq an Milian Wolff | Markdownify | Typogridder |
Sponsored Links |
|
|||
Ja, ich verstehe es. Habe mir vorhin nochmal Gedanke gemacht und gemerkt, dass deine Variante viel besser ist.
a) fällt das sum() bei jedem Aufruf weg b) fällt das count(*) bei jedem Aufruf weg c) folg aus b) -> Group By fällt weg Danke, das werde ich mal versuchen! Noch eine Frage zu EXPLAIN: Wie weit kann man optimieren, woher weiß ich, wann ich fertigoptimiert habe? Habe ein paar Indizes gesetzt und die Tabellen ein wenig optimiert, nun sieht das Ergebnis so aus: http://img1.myimg.de/Zwischenablage029c0.jpg ist ja schon mal viel besser, als das ganz am Anfang. Aber kann ich nun weiter optimieren oder lässt man das so stehen? |
Sponsored Links |
|
|||
Hi!
Da komme ich mit meiner Antwort etwas zu spät. Du hast meine Lösung ja bereits verstanden. Bei der zweiten Zeile stehen folgende Indizes für die Manschine zur Auswahl (possible_keys): -> PRIMARY -> cat_id -> flag -> freigeschaltet Tatsächlich wird aber nur der Index cat_id verwendet. Die anderen könntest du löschen, wenn diese nicht von anderen Abfragen verwendet werden. Die Spalte "type" gibt Auskunft über die Art der Abfrage und die damit verbundene Geschwindigkeit: 1. system (sehr schnell) 2. const 3. eq_ref 4. ref 5. range 6. index 7. ALL (sehr langsam) Für weitere Informationen über die Typen kannst du dich in der Dokumentation schlau machen. Weiterhin solltest du die Spalte "Rows" im Blick haben. Dort sollten möglichst wenig Datensätze ausgewählt werden. Je weniger desto schneller. Ich würde mal behaupten, nachdem du jetzt Indizes gesetzt hast, deine Abfrage optimiert hast und zudem deine Datenbankstruktur angepasst hast, um Berechnung bei jedem Aufruf zu vermeiden, gibt es einfach nichts mehr was man optimieren kann. Jetzt könnte wirklich nur eine bessere Maschine helfen. Die Zeit die sie jetzt benötigt braucht sie einfach. Vielleicht gibt es noch die ein oder andere Möglichkeit dein Script weiter zu optimieren. Das kannst aber nur du beurteilen. Gruß Jan |
|
|||
Danke schonmal für deine Antwort.
Also die Abfrage ist wirklich super schnell, nur ich dachte mir nun Vorsicht ist besser als Nachsicht Also dachte ich einfach, dass ich nun mal richtig optimiere und mich somit rüste für die Zukunft (naif? ) Naja, ich meinte ja nur, wie man das ganze (vor allem Type) optimiert. Ich weiß zwar, was schnell un langsam ist ("system" schnell und "ALL" langsam), aber meine Frage ist einfach, wie komme ich überhaupt auf was schnelleres. Wie kann ich nun die 'ref's im Screenshot auf eq_ref, const oder sogar system bekommen? Das ist das, was ich mich andauernd Frage |
|
||||
Lies dir dazu bitte die Seite im Manual von MySQL durch - bestimmte Typen kann man einfach nicht immer erreichen (afaik wird Const. z.B. nur verwendet, wenn es nur eine Zeile in der Tabelle gibt)
__________________
Bitte keine PN's - schreibt mir ne anständige Mail oder sprecht mich über Msn / Icq an Milian Wolff | Markdownify | Typogridder |
|
|||
Ich werd noch wahrsinnig. Nun habe ich die Struktur geändert. Der Query sieht wie folgt aus:
Code:
SELECT e.id, c.name, c.id as cat_id, e.freigeschaltet, e.beschreibung, e.poster, e.poster_hp, (e.voteSumme/e.voteAnzahl) as roundedRating FROM link_entries e JOIN link_cats AS c ON e.cat_id = c.id WHERE flag = 1 AND freigeschaltet < 1142535838 ORDER BY freigeschaltet desc LIMIT 0, 35 Siehe: http://img1.myimg.de/Zwischenablage0277b.jpg Irgendwas muss ich doch falsch gemacht haben, oder? Danke vielmals im voraus! edit: ich bin am verzweifeln, irgendwas muss doch falsch sein. Der Query ist auch noch um einiges langsamer |
|
||||
Hast du einen Key bei e.cat_id = c.id ?
Außerdem solltest du die Spalte Rows beachten, da sind jetzt über dreimal soviele drin, wie noch Anfangs.
__________________
Bitte keine PN's - schreibt mir ne anständige Mail oder sprecht mich über Msn / Icq an Milian Wolff | Markdownify | Typogridder |
|
|||
Zitat:
Ja ich weiß auch, dass dort nun ein großer Wert in 'Rows' steht, aber ich habe keinen plan, warum ... Wie soll ich diese denn reduzieren? ist ja klar, dass dort sehr sehr viele drin stehen, da sehr viele Links von dieser Abfrage betroffen sind. Aber eigentlich müsste LIMIT die ja rausfiltern oder? Soll ich doch wieder zu dem alten System zurückkehren? Weil ich weiß echt nicht, was nun daran so groß anders ist, dass 3 mal so viele Rows betroffen sind |
|
|||
Ok, ich glaube, ich weiß woran es liegt:
a) Habe ich sehr viele testdatensätze importiert, sodass es klar ist, dass nun mehr Zeilen betroffen sind b) Hatte ich in den vorherigen Queries immer noch das "AND c.id = 3" drin, was ich bei meinem neuen Query vergessen habe ... Wenn ich also in beiden Queries das "AND c.id = 3" rauslasse, dann ist der neue schneller |
Sponsored Links |
|
|||
Hallo Leute
Habe mal wieder ein paar Fragen: Code:
EXPLAIN SELECT count(id) as anz FROM link_entries WHERE flag = 1 Code:
EXPLAIN SELECT id, incoming_hits, use_direct_link, daily_ins, daily_outs, name, link, hitz FROM toplists ORDER BY orde DESC, daily_ins DESC, incoming_hits DESC LIMIT 6 |
Sponsored Links |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Media Queries - Wie Ausnahmen behandeln? | Toxuas | CSS | 3 | 02.08.2016 13:12 |
Media Queries wollen einfach nicht auf dem Smartphone funktionieren! | Der.Andi | CSS | 4 | 15.11.2015 11:31 |
Media Queries vs. Extraseite | Mr.T | CSS | 5 | 07.11.2011 22:58 |
Queries für verschiedene DBs generieren lassen | Schelm.isch | Serveradministration und serverseitige Scripte | 5 | 23.06.2008 18:26 |
Seite optimieren | Petty | (X)HTML | 31 | 16.03.2005 00:22 |