Ik ben bezig met een statistiekenpakket. Hiervoor heb ik een tabel 'providers' waarin van de betreffende provider de ip-range staat (van ip1 tot ip2), daarnaast het land en de providernaam.
ip1 | ip2 | land | provider
Die tabel beslaat een klein 840.00 records en als ik een query erop loslaat duurtie een dikke drie seconde en das net ff te lang...
Ik heb hieronder de gebruikte query staan. ip adres is fictief. de toevoeging "AND landNaam = 'Nederland'" Verbetert nauwlijks de snelheid.
Zelf had ik het idee om uit de tabel 'provider' alle nederlandse providers eruit te halen en in een aparte tabel te zetten. Op die manier krijg ik wel een hogere performance en krijg ik binnen 0,3 s voor de nederlandse bezoekers resultaat, en vang ik zo'n 90% af, maar die 10% van de bezoekers die van andere locaties komen kan ik moeilijk drie seconde laten wachten...
Mijn vraag: heeft iemand een idee hoe ik die database sneller krijgt? Om voor elk land nu een aparte tabel te maken lijkt me niet echt alles... Of moet ik de tabel 'provider' opbreken in bijvoorbeeld 8 stukken op basis van de ip1 en ip2 en daar een tabel voor te zetten die bepaald wat de vervolg tabel gaat worden:
dus eerst kijken in mn indexTabel (ip1 en ip2 is dan de range van bijvoorbeeld de eerste 100.000 records van de oude tabel provider (dus krijg ik 9 records binnen deze tabel))
ip1 | ip2 | providerTabelID
en aan de hand van providerTabelID paktie de tabel waarbinnen het ip zich zou moeten bevinden... Is dit slim of kan dat beter en sneller? Wat is zo'n beetje max aan records met bovenstaande query binnen mysql? Of is de query sowieso al slecht? Ben benieuwd naar jullie ideeën...
ip1 | ip2 | land | provider
Die tabel beslaat een klein 840.00 records en als ik een query erop loslaat duurtie een dikke drie seconde en das net ff te lang...
Ik heb hieronder de gebruikte query staan. ip adres is fictief. de toevoeging "AND landNaam = 'Nederland'" Verbetert nauwlijks de snelheid.
MySQL:
1
2
3
4
5
| SELECT * FROM provider WHERE ip1 <= INET_ATON('212.130.156.90') AND ip2 >= INET_ATON('212.130.156.90') AND landNaam = 'Nederland' |
Zelf had ik het idee om uit de tabel 'provider' alle nederlandse providers eruit te halen en in een aparte tabel te zetten. Op die manier krijg ik wel een hogere performance en krijg ik binnen 0,3 s voor de nederlandse bezoekers resultaat, en vang ik zo'n 90% af, maar die 10% van de bezoekers die van andere locaties komen kan ik moeilijk drie seconde laten wachten...
Mijn vraag: heeft iemand een idee hoe ik die database sneller krijgt? Om voor elk land nu een aparte tabel te maken lijkt me niet echt alles... Of moet ik de tabel 'provider' opbreken in bijvoorbeeld 8 stukken op basis van de ip1 en ip2 en daar een tabel voor te zetten die bepaald wat de vervolg tabel gaat worden:
dus eerst kijken in mn indexTabel (ip1 en ip2 is dan de range van bijvoorbeeld de eerste 100.000 records van de oude tabel provider (dus krijg ik 9 records binnen deze tabel))
ip1 | ip2 | providerTabelID
en aan de hand van providerTabelID paktie de tabel waarbinnen het ip zich zou moeten bevinden... Is dit slim of kan dat beter en sneller? Wat is zo'n beetje max aan records met bovenstaande query binnen mysql? Of is de query sowieso al slecht? Ben benieuwd naar jullie ideeën...