Query optimalisatie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Alfred -

Alfred -

03/07/2006 23:47:00
Quote Anchor link
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...
Gewijzigd op 01/01/1970 01:00:00 door Alfred -
 
PHP hulp

PHP hulp

17/11/2024 11:26:11
 
Klaasjan Boven

Klaasjan Boven

04/07/2006 00:27:00
Quote Anchor link
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 ' '
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Alfred -

Alfred -

04/07/2006 00:36:00
Quote Anchor link
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 :)
 
Klaasjan Boven

Klaasjan Boven

04/07/2006 08:37:00
Quote Anchor link
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
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Remco van Arkelen

Remco van Arkelen

04/07/2006 09:41:00
Quote Anchor link
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
 
Alfred -

Alfred -

04/07/2006 23:32:00
Quote Anchor link
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


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 -
 
Alfred -

Alfred -

05/07/2006 15:11:00
Quote Anchor link
Bump
Gewijzigd op 01/01/1970 01:00:00 door Alfred -
 
Alfred -

Alfred -

06/07/2006 13:17:00
Quote Anchor link
Bump 2 :)
 
Alfred -

Alfred -

07/07/2006 13:40:00
Quote Anchor link
Bump 3 :)
 
Roy Bongers

Roy Bongers

07/07/2006 13:57:00
Quote Anchor link
Zou 't niet aan die left join kunnen liggen? Heb je die echt nodig of kun je ook een normale join gebruiken?
 
Alfred -

Alfred -

07/07/2006 14:22:00
Quote Anchor link
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 :)
Gewijzigd op 01/01/1970 01:00:00 door Alfred -
 
Roy Bongers

Roy Bongers

07/07/2006 15:36:00
Quote Anchor link
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...
 
Alfred -

Alfred -

07/07/2006 16:34:00
Quote Anchor link
Ik gebruik alle resultaten. Deze zullen nooit meer dan 50 stuks zijn, dus dat lijkt me ook niet overdreven.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.