Hallo alle,
ich habe die Datenbank von maxmind auf meine Bedürfnisse angepasst. Sie besteht für Deutschland nur noch aus einer Tabelle mit ca. 100.000 Zeilen.
| begin_ip_num | end_ip_num | region | |----| |1591278080|1591278207|bw|
- Sind Indizes notwendig und sinnvoll oder eher kontraproduktiv?
Wenn ich nun das Herkunftsbundesland erraten möchte, gibt es mehrere Varianten.
SELECT region
FROM geoip
WHERE
1591278000 BETWEEN begin_ip_num AND end_ip_num
SELECT region
FROM geoip
WHERE
1591278000 >= begin_ip_num AND 1591278000 <= end_ip_num
- Mein Gefühl sagt mir, dass
BETWEEN
schneller sein wird. Gibt es da Erfahrungswerte?
Da es theoretisch nur maximal einen passenden Datensatz gibt, werde ich LIMIT 1
verwenden. Bricht MySQL tatsächlich nach dem ersten Fund ab? Die Spezifikation sagt nur „If you select only a few rows with LIMIT, MySQL uses indexes in some cases when normally it would prefer to do a full table scan.“ Also Indizes verwenden?
- Gibt es ggf. eine andere Möglichkeit, das Durchsuchen der Tabelle nach dem ersten Fund abzubrechen?
Ob das Ganze vielleicht unsinnig ist, weil
- das (erstmalige) Laden der Seite wesentlich länger dauern wird (das wird zu testen sein)
- die Ergebnisse möglicherweise fehlerhaft sind
ist bekannt und soll hier nicht diskutiert werden
Bis demnächst
Matthias