PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Query optimieren



Gremlin
25.12.2008, 14:27
Hallo,
habe folgenden SQL Befehl, wenn ich ihn ausführe legt es mir ständig den ganzen Server platt oO

SQL Befehl:


SELECT mitglieder.*, land.CC2 FROM
mitglieder
LEFT JOIN ip2c AS land ON ( land.IP_FROM <= inet_aton(mitglieder.ip) AND land.IP_TO >= inet_aton(mitglieder.ip))
WHERE land.CC2 NOT IN ('DE', 'AT', 'CH')
Habe folgende Tabellenstruktur von ip2c:


`ip2c` (
`IP_FROM` varchar(20) NOT NULL default '0',
`IP_TO` varchar(20) NOT NULL default '0',
`CC2` char(2) NOT NULL default '',
`CC3` char(3) NOT NULL default '',
`land` tinytext NOT NULL,

KEY `IP_FROM` (`IP_FROM`,`IP_TO`)
)
Wie könnte ich den noch sinvoll optimieren? LIMIT hat auch nichts gebracht, habe ich schon probiert :wink:.

Ziel:
Anhand der IP Adresse der User sämtliche User auslesen deren Herkunftsland anhand der ip2country Tabelle nicht DE/AT/CH ist :smile:

Holstenjungs
25.12.2008, 15:38
Viel optimieren kannst du da nicht. Du kannst höchstens mal Index setzen auf die Felder die er für die Suche benötigt. Die findet er dann schneller, aber ich denke da für jede Userabfrage ebenfalls die IP2C Tabelle dursucht wird, welche ja über 80k Einträge hat, wird es immer so lange dauern.

Da wäre es vll. einfacher in die Usertabelle das passende Land zur IP reinzuschreiben und danach dann die Usertabelle zu durchsuchen.

schulz3000
25.12.2008, 15:50
Also ich würd mal noch nen Index auf CC2 setzen und irgendwo hab ich mal gelesen das bei mysql die "not in" Funktion ziemlich Speicherintensiv sein soll.
Anstatt "not in" einfach mal mit land.CC2!='DE' AND land.CC2!='AT' AND usw. probieren obs dann schneller läuft.