Unsicher bez. geschwindikeit

aargau

Erfahrenes Mitglied
Ich habe vorhin zum Test mal eine abfrage im phpmyadmin eingegeben wie sie auf meiner Seite einigemale zum einsatz kommt. Nun habe ich allerdings mal aus Spass das "ORDER BY" und / oder LIMIT weggelassen und siehe da die Abfrage wurde einiges schneller usgeführt. Kann mir jedmand sagen ob ich dies irgend wie noch Optimieren kann oder ob dies völlig normal ist?

Code:
SELECT bilder.idp , bilder.comment, bilder.nschild, bilder.thumb 
FROM bilder,nschild 
WHERE nschild.up = '1' AND  nschild.nsuserid='1' 
AND nschild.bildid = bilder.idp AND (typ = '3' OR typ ='2') 
ORDER BY bilder.time DESC LIMIT 2
Code:
Zeige Datensätze 0 - 1 (2 insgesamt, die Abfrage dauerte 0.0026 sek.)

Das gleiche ohne ORDER BY und LIMIT:
Code:
Zeige Datensätze 0 - 29 (100 insgesamt, die Abfrage dauerte 0.0008 sek.)

Das würde ja heissen ich wäre ev. schneller wenn ich alle Bilder ausgeben würde und diese mit PHP Sortiere?
 
Das ist ganz normal, dass deine Abfrage schneller wird, wenn du das order by wegläßt.
Otimieren ist hier nicht mehr möglich(in dem select(sonst inizes oder Partitionierung)).
Es ist also gut möglich, dass ein späteres sortieren schneller ist, als es direkt von der DB machen zu lassen.
 
Zuletzt bearbeitet:
Mess doch mal, ob du in 18ms die 100 Datensätze in PHP sortieren kannst.
Und danach vergleiche mal wie es bei 1000000 Zeilen aussieht. Und guck dir dann auch noch den massiven traffic-overhead an.
Was nutzt du für Indizes?
Mach mal ein "EXPLAIN SELECT".
 
Mit dem EXPLAIN SELECT erhalte ich dies:
http://img237.imageshack.us/img237/9530/121b.png

Indizes Infos und gleich mal ein überblick der Tabelle:
http://img697.imageshack.us/img697/7929/122zg.png

d.H. eigentlich das es über mysql deutlich sinnvoller ist als mittels PHP?
Bis jetzt hat es mich auch nicht gestört, die gesammte seite ist in unter 0.1sek abgearbeitet mit 2X der Query von oben (einfach unterschidliche typen) und X anderen Querys.
Aber es hat mich schon etwas verwirrt wiso ohne es ohne das LIMIT und Sortierung schneller geht als Wenn er nur zwei Zeilen ausgeben muss.
 
Du könntest noch einen index auf "time" setzen, oder noch besser, benutze "ORDER BY bilder.idp DESC", denn ich gehe mal davon aus, das "time" die Zeit des Eintragens ist und somit proportional zu idp.
Guck dir auch mal an wie es aussieht, wenn du nur das LIMIT weglässt, bzw. nur ORDER BY. Das LIMIT mach keinen Unterschied beim verarbeiten, aber beim verschicken.
 
Zuletzt bearbeitet:
"ORDER BY bilder.idp DESC" tönt gut, ich sehe gerade das bilder.time eh sinnlos war, eigentlich wäre mal gedacht gewesen das es nach den neusten Namensschilder (Markierungen) der User sortiert wird, ist allerdings dazumal untergegangen und würde jetzt wohl eh die User verunsichern.
Vielen Dank für deine Hilfe!

per bilder.idp ist es etwas schneller geworden:
Code:
Zeige Datensätze 0 - 1 (2 insgesamt, die Abfrage dauerte 0.0029 sek.) [idp: 13173 - 13170]
 
Du solltest einfach mal deine Tabelle mit ein paar tausend(besser millionen) zufälligen Datensätzen füllen. Dann kannst du erst vernünftig die Geschwindigkeit vergleichen. Denn in dem Bereich, in welchem du dich bewegst, können kleine Störungen(der Server hat ja noch einige andere Prozesse laufen) schon einen großen Unterschied ausmachen.
 
Zurück