zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Meine Queries optimieren

Antwort
 
LinkBack Themen-Optionen Ansicht
  #21 (permalink)  
Alt 15.03.2006, 17:52
Benutzerbild von The Doc
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 19.01.2005
Beiträge: 1.114
The Doc befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
Sponsored Links
  #22 (permalink)  
Alt 15.03.2006, 19:15
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 03.11.2005
Beiträge: 175
insanic! befindet sich auf einem aufstrebenden Ast
Standard

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?
Mit Zitat antworten
Sponsored Links
  #23 (permalink)  
Alt 15.03.2006, 21:26
Jan Jan ist offline
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 27.02.2005
Beiträge: 175
Jan befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #24 (permalink)  
Alt 15.03.2006, 21:34
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 03.11.2005
Beiträge: 175
insanic! befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #25 (permalink)  
Alt 16.03.2006, 15:52
Benutzerbild von The Doc
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 19.01.2005
Beiträge: 1.114
The Doc befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #26 (permalink)  
Alt 16.03.2006, 21:06
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 03.11.2005
Beiträge: 175
insanic! befindet sich auf einem aufstrebenden Ast
Standard

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
und man glaubt es kaum, das Ding bringt schlechtere Ergebnisse als zuvor mit sum(), count(), Group by und Where-Join ...

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
Mit Zitat antworten
  #27 (permalink)  
Alt 16.03.2006, 21:22
Benutzerbild von The Doc
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 19.01.2005
Beiträge: 1.114
The Doc befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #28 (permalink)  
Alt 16.03.2006, 22:15
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 The Doc
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.
ja e.cat_id und c.id sind Indexes, oder was genau meinst du?

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
Mit Zitat antworten
  #29 (permalink)  
Alt 17.03.2006, 08:34
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 03.11.2005
Beiträge: 175
insanic! befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
Sponsored Links
  #30 (permalink)  
Alt 17.03.2006, 23:18
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 03.11.2005
Beiträge: 175
insanic! befindet sich auf einem aufstrebenden Ast
Standard

Hallo Leute

Habe mal wieder ein paar Fragen:

Code:
EXPLAIN SELECT count(id) as anz FROM link_entries WHERE flag = 1
-> type: ALL, aber was kann ich denn da optimieren, außer flag einen Index zu geben? Nichts oder?

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
Extra: using filesort. Habe auhc schon geschaut, wie man Order By's optimieren kann. Habe versucht, auf die Spalten ein Index zu setzten (wurde mir im IRC vorgeschalgen), hat ebenfalls nicht geholfen! Was kann man da machen? Danke!
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Queries für verschiedene DBs generieren lassen Schelm.isch Serveradministration und serverseitige Scripte 5 23.06.2008 18:26
Queries und Performance insanic! Serveradministration und serverseitige Scripte 17 15.04.2006 17:49
kann man den code optimieren? Sentinel CSS 2 23.08.2005 12:45
120 dpi bildschirmanzeige --> website optimieren? captain CSS 1 16.06.2005 15:59
Seite optimieren Petty (X)HTML 31 16.03.2005 00:22


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:00 Uhr.