Explain vraagjes of bepaalde waarden vanuit de db ok zijn

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan heide

jan heide

15/11/2007 21:34:00
Quote Anchor link
Hoi allemaal,

hier een vraagje of iemand kan helpen met beoordeling van de uitkomst van explain select scripts.

hier bijv. is dit goed of moet hier nog veel aan gedaan worden???

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
EXPLAIN SELECT poster.poster_id, poster.gebruikersnaam, song.poster_id, song.song_id, song.songnaam, song.datumgepost, song.songtekst, COUNT( song.poster_id ) aantal_songs
FROM poster
LEFT JOIN song ON ( poster.poster_id = song.poster_id )
WHERE song.datumgepost > '$DAT1'
GROUP BY poster.poster_id
ORDER BY aantal_songs DESC
LIMIT 9  


id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra  
1 SIMPLE song ALL NULL NULL NULL NULL 1944 Using where; Using temporary; Using filesort
1 SIMPLE poster ref poster_id poster_id 2 gitaartabs.song.poster_id 13 Using where
?>


en nog een andere:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
EXPLAIN SELECT aantaldownload_maand, song_id
FROM downloads
WHERE datumdownload_maand = '$maandnu'
ORDER BY aantaldownload_maand DESC
LIMIT 10

id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra  
1 SIMPLE downloads ALL NULL NULL NULL NULL 1986 Using where; Using filesort
?>


hopelijk kan iemand hierover iets zeggen
alvast thanx
 
PHP hulp

PHP hulp

24/11/2024 09:12:00
 
Frank -

Frank -

15/11/2007 23:10:00
Quote Anchor link
De eerste query is ongeldig en levert onbetrouwbare resultaten op. Wanneer je een agregate functie gebruikt, COUNT() in dit geval, zul je alle overige gegevens die je opvraagt, in de GROUP BY moeten zetten. Dat gebeurt hier niet, deze query hoort te worden afgekeurd. Helaas gaat MySQL by default poep genereren... Stel MySQL in op STRICT of neem een betere database, dan krijg je een keurig foutmelding.

De 2e query is wat vreemd, een maand is normaal gesproken onderdeel van een datum, het wordt echter niet als datum opgeslagen. Wanneer je ook een jaartal en/of dag opslaat, dan zul je dit echt moeten aanpassen.

Een index op de maand zal de boel aanzienlijk kunnen versnellen, zowel de WHERE als het sorteren zullen hier flink van profiteren. De filesort hoort dan ook te verdwijnen in de verklaring van de query. Filesort is een indicator dat er niet optimaal wordt gewerkt.

De 1e query heb ik niet verder geanalyseerd, die zul je eerst opnieuw moeten opstellen.

Edit: Hij is leuk! Ik wilde waarschijnlijk iets anders zeggen, maar dat kwam er niet helemaal uit
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Winston Smith

Winston Smith

16/11/2007 00:01:00
Quote Anchor link
Quote:
overbetrouwbare
Overbetrouwbare? Dat lijkt me alleen maar prima >:) Of bedoel je soms onbetrouwbare? Tijd om weer eens naar Nederland te gaan en je kennis van de Nederlandse taal bij te spijkeren Frank, uiteraard tijdens een meeting :P


Overigens is mij afgelopen weekend tijdens de workshop van PHPFREAKZ aangeraden niet teveel op EXPLAIN te vertrouwen, maar ook zeker de snelheid van de (diverse mogelijke) query('s) te meten. Dit omdat EXPLAIN soms aangeeft dat query 1 extreem veel zou moeten doorzoeken, terwijl query 2 volgens EXPLAIN een stuk sneller zou moeten zijn. In de praktijk blijkt dan dat query 1 soms toch véél sneller is.
Gewijzigd op 01/01/1970 01:00:00 door Winston Smith
 



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.