Query optimalisatie
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...
Gewijzigd op 01/01/1970 01:00:00 door Alfred -
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 ' '
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
Het hernoemen deel, kan ik even niet volgen wat je bedoelt?
De quotes zijn weggehaald, was dom van me :)
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
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
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
Remco:
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
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?
Gewijzigd op 01/01/1970 01:00:00 door Alfred -
Gewijzigd op 01/01/1970 01:00:00 door Alfred -
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?
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 :)
Gewijzigd op 01/01/1970 01:00:00 door Alfred -
Gebruik je ook alle resulaten? Want je haalt ze iig wel op. Stel dat je 1000 records hebt en je gebruikt er maar 10 van...
Ik gebruik alle resultaten. Deze zullen nooit meer dan 50 stuks zijn, dus dat lijkt me ook niet overdreven.