Ik heb de volgende query:

SELECT foto.id, foto.fotonaam, foto.datum, foto.tekst, COUNT(reactie.id) AS reacties, SUM(reactie.punten) AS sterren FROM fotos AS foto LEFT JOIN fotos_reacties AS reactie ON (foto.id = reactie.foto_id) WHERE foto.user_id = '2' GROUP BY foto.id ORDER BY foto.id DESC

Enkel, deze query heeft 1.8 sec nodig om uitgevoerd te worden. Dit lijkt me lang. Kan ik dit optimaliseren?

Een schets van wat ik nodig heb:
Tabel fotos:
id, fotonaam, datum, tekst
Tabel fotos_reacties:
aantal reacties, en de som van de puntenvelden

Iemand ideeën hoe dit sneller kan ?

Thanks

Edit:

Ter info, zonder de SUM(), duurt de query nog steeds 1.2 seconden... Dus de COUNT() is ook vrij zwaar blijkbaar...
Om eerlijk te zijn lijkt het me dat de Query redelijk in elkaar zit

alleen dit
FROM fotos AS foto LEFT JOIN fotos_reacties AS reactie ON (foto.id = reactie.foto_id) WHERE foto.user_id = '2' GROUP BY foto.id ORDER BY foto.id DESC
(vette gedeelte Lijkt me wat overdreven. Tevens snap ik niet dat je hem eerst hernoemd en dan toch weer fotos_reacties gebruikt)

Ik neem aan dat foto.user_id een int is en dan hoeft hij niet tussen ' '
De as foto dient omdat de tabel in realiteit nog een beetje anders noemt dan "fotos", ik verberg de naam enkel een beetje op dit forum.

Het hernoemen deel, kan ik even niet volgen wat je bedoelt?

De quotes zijn weggehaald, was dom van me :)
Je hernoemd hem met de functie AS en later gebruik je toch weer de oorspronkelijke naam:

SELECT
fotos.id,
fotos.fotonaam,
fotos.datum,
fotos.tekst,
COUNT(reactie.id) AS reacties,
SUM(reactie.punten) AS sterren
FROM fotos
LEFT JOIN fotos_reacties ON (fotos.id = reactie.foto_id)
WHERE fotos.user_id = '2' GROUP BY fotos.id ORDER BY fotos.id DESC
Remco van Arkelen schreef op 04.07.2006 09:41
Die query rammelt m.i. aan alle kanten en kan slechts alleen werken in MySQL :)

Hoe kan je nu SELECT foto.id, foto.fotonaam, foto.datum, foto.tekst doen als je slechts een GROUP BY hebt op foto.id??

Lees deze artikeltjes eens door:
http://www.yapf.net/faq.php/100/633
http://www.yapf.net/faq.php/100/861


Om hier eerlijk op te antwoorden, de group by heb ik verzonnen, en geprobeerd tot het werkte, omdat anders de sum en count niet gingen... Maar ik ga je links eens bekijken... Andere tips blijven nog steeds welkom :)

Edit:
Oké, logisch gezien moet ik dus groepjes maken. Dus dacht ik groepjes te maken op reactie.foto_id, dus dan groepeer ik de velden die hij moet optellen, en het aantal van moet tellen. Deze query geeft identiek dezelfde resultaten, maar doet er 0.1 sec langer over, waardoor de query nog steeds 1.3 sec duurt...

Kan je me helpen waar ik de mist in ga Remco?
Bump
Bump 2 :)
Bump 3 :)
Zou 't niet aan die left join kunnen liggen? Heb je die echt nodig of kun je ook een normale join gebruiken?
Hmhm.. Daar zeg je wat, verdorie, ik kijk er al 3 dagen gek op, zonder de JOIN kan het in dit geval ook, als ik gewoon de reacties tegelijk wis als de gebruiker zich verwijdert. Daardoor heeft de query nu maar 0.0003 seconden meer nodig! Dankje Roy!

Edit:

Ik heb de join wel nodig... Als er geen reacties op een foto gegeven is, is het de bedoeling dat de foto ook nog wel werkt... Verderzoeken dus :)

Reageren