Na zoeken op google, lezen in de GoT FAQ en andere topics, ben ik er nog steeds niet achter gekomen hoe ik de volgende query sneller kan maken:
Huidige code doet het perfect, maar helaas duurt het 10 sec voordat de query af is, en in die 10 sec is de MySQL server volledig belast, en omdat ik het als een terugkerende (cronjob) query wil gebruiken, en de tabel 2800 rijen bevat, zal die op zijn minst snel moeten worden uitgevoerd.
Ik zelf zat al te denken om de "inner join" weg te halen, maar het probleem dan is, dat ik dan 2 members tabellen heb, die dan door MySQL door elkaar worden gehaald. Er is in werkelijkheid 1 tabel members die -naar mijn weten- 2 keer moet worden vermeld in de query. De 2de keer is voor het volgende, simpel gezegd: er mogen alleen rijen worden geplaatst in het resultaat als de kolom "referer" een echte "membersnaam" is. Zo filtert hij de neppe referers eruit.
code:
1
2
3
4
5
6
7
8
| SELECT m2.`nickname`, m1.`ip`, COUNT( DISTINCT m1.`ip` ) AS `aantal`, m1.`referer` FROM `members` AS `m1` INNER JOIN `members` AS `m2` ON m2.`nickname` = m1.`referer` WHERE m2.`health` > '0' AND m2.`class` < '2' GROUP BY m1.`referer` ORDER BY `aantal` DESC LIMIT 0 , 10 |
Huidige code doet het perfect, maar helaas duurt het 10 sec voordat de query af is, en in die 10 sec is de MySQL server volledig belast, en omdat ik het als een terugkerende (cronjob) query wil gebruiken, en de tabel 2800 rijen bevat, zal die op zijn minst snel moeten worden uitgevoerd.
Ik zelf zat al te denken om de "inner join" weg te halen, maar het probleem dan is, dat ik dan 2 members tabellen heb, die dan door MySQL door elkaar worden gehaald. Er is in werkelijkheid 1 tabel members die -naar mijn weten- 2 keer moet worden vermeld in de query. De 2de keer is voor het volgende, simpel gezegd: er mogen alleen rijen worden geplaatst in het resultaat als de kolom "referer" een echte "membersnaam" is. Zo filtert hij de neppe referers eruit.
[ Voor 4% gewijzigd door Upsal op 05-09-2005 21:34 ]