Abfrage Performance MySQL DB

max

Erfahrenes Mitglied
Ich habe für ein Statistiksystem die IP2Location Datenbank in Verwendung, diese beinhaltet ca 1,5 Mio. Datensätze.

Mein erster Versuch war es wie in der Dokumentation alles einfach in eine Tabelle meiner MySQL Datenbank zu importieren und mit Indexen zu Versehen, aber dabei ist die Dauer einer Abfrage extrem hoch.

Aufgebaut ist das ganze so:
Code:
  IP_From, IP_To, Country Code, Country Name, Region, City
     "201653760","201654015","US","UNITED STATES","VIRGINIA","GORDONSVILLE"
     "201654016","201654143","US","UNITED STATES","VIRGINIA","LYNCHBURG"
     "201654144","201654159","US","UNITED STATES","VIRGINIA","RICHMOND"

Meine Abfrage sieht zB so aus:
Code:
     SELECT  `country_code` ,  `country_name` ,  `region`
      FROM  `country`  
       WHERE `ip_start`  <= 50594560 AND  `ip_ende`  >= 50594560

Jetzt habe ich das ganze auf Verschiedene Tabellen aufgeteilt:
location_staaten:
Code:
id | country_code | country_name

location_region:
Code:
id | s_id | region

location_ip_range:
Code:
s_id | r_id | ip_from | ip_to

s_id: ID des Staates
r_id: ID der Region

Was könnte ich noch machen um die Performance zu Steigern?
Wo setzte ich am Besten einen Index?
Ich will einfach das Herkunftsland und die Region herausfinden wie mache ich hier das Query am besten?

Ich hatte bis jetzt noch nie mit so einer Umfangreichen Datenbank zu tun, und hätte deshalb gerne noch ein paar tipps.

danke
max
 
Ich würde

1. EXPLAIN Select nutzen um bischen was über die Indexe zu erfahren
2. Statt <= => between benutzen
3. Mind. auf den Zeitstempel einen Index legen


Chris
 

Neue Beiträge

Zurück