Hi Andreas Korthaus,
Habe mir die Tabelle runtergeladen, enthält 16.000 Datensätze, und zwar der Form:
das ist genug, um durch den Einsatz einer Baumstruktur etwas gewinnen zu können.
log2(10000) ist 14; Du kannst also bis zu Faktor 1000 gewinnen, abzüglich des Verbindungsaufbaus zur Datenbank und deren interner Code-Generierung & Dateiauslieferung.
Aber das war nicht wirklich schnell, hat im Schnitt gut 0,2 Sekunden gedauert. Und wie ich das bedeutend schneller bekommen soll weiß ich auch nicht. Ich habe auch versucht mit einem if, also nur prüfen ob 2. Nummer kleiner als meine Nummer, aber das war kaum schneller. Vielleicht liegt es auch am explode, aber so viel macht das wohl nicht.
Doch, genau das denke ich. In der Datenbank liegen die einzelnen Felder ja schon getrennt vor.
"SELECT COUNTRY_CODE, COUNTRY_NAME FROM ip WHERE IP_FROM <= '$dec_ip' && IP_TO >= '$dec_ip'"
Und alles in allem(mit Verbindung herstellen und einlesen in PHP) hat das ganze nur noch 0,04 Sekunden gedauert, es war fast 6 mal so schnell.
Seh'nse wohl. ;-)
Dann habe ich mal den Typen von MyISAM auf HEAP verändert, da hat sich auch kaum was getan, lag vermutlich daran dass die Daten so kurz danach noch in irgendeinem Cache lagen.
Dafür wiederum ist Deine Tabelle zu klein. 16000 mal knapp 10 Byte sind kaum mehr als 1 MB - das wird eine gut konfigurierte (!) Datenbank permanent im RAM halten können.
Dann habe ich es mit einem Index versuchen wollen, aber egal was ich da probiert habe hat das ganze eher verlangsamt als es zu beschleunigen. Lässt sich hier einfach kein sinnvoller Index verwenden?
Hier schließe ich mich meinen Vorrednern an: Ein (möglichst) UNIQUE INDEX über die Spalte(n) Deiner WHERE-Klausel(n) bringt ziemlich sicher etwas (je nachdem, wie gut er projeziert - sieht bei Dir aber gut aus).
Aber was mich extremst wundert, wieso ist das auslesen von diesen paar Datensätzen um so viel langsamer ist als mit MySQL ohne jeglichen Index. Ich meine, wie bitte geht das dann mit dem Archiv hier performant?
Das Archiv hat exakt dasselbe Problem wie Du, und es verwendet praktisch dasselbe Verfahren (das ich heute nicht mehr "performant" nennen würde ...).
Viele Grüße
Michael
T'Pol: I apologize if I acted inappropriately.
V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
(sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.