2012-04-06 2 views
1

나는 몇몇의 도시를 찾기 위해 maxmind 데이터베이스를 사용하려고한다.
1 테이블 컬럼 : startIpNum, endIpNum는,
2 테이블 열 locId
:
locId, 국가, 지역, 도시,을 PostalCode, 위도, 경도, metroCode는,
빠른 areaCode (http://www.maxmind.com/app/geolitecity) 2 개 테이블이 있습니다 설명 : 첫 번째 테이블을 사용하여 테이블의 위치 ID를 얻은 다음 두 번째 테이블에서 그 위치 정보를 얻을 수 있습니다. Ok, 프로세스의 두 번째 부분을 잊어 버리자. 첫 번째 부분을 수행하기 위해 mysql을 사용하고 locId를 얻으려면 다음 코드를 사용한다. IP는 * 256 * 256 * 256 + 256 * B * C * 256 + 256 + = IP에서 D (> ABCD 예 197.248.67.1이다Maxmind에서 도시로 - mysql 인덱싱

SELECT locId FROM first_table WHERE startIpNum<=IP and endIpNum>=IP LIMIT 1 

, A = 197, B = 248 .. 이것은 우리가 정수 들간의 비교에 대해 말하는 것을 의미합니다. 여기에 문제가 있습니다.이 작업은 너무 느립니다. 내 두 번째 생각은 인덱스를 사용했다, 그래서 나는이 같은 인덱스를 사용하려고 ...

CREATE INDEX test ON first_table (startIpNum,endIpNum,locId) 

어쩌면 내가 그건 내 문제에 대한 최선의 해결책이 아니었다 최고의 세계의 인덱스 만 생각이고 음 ... 그렇지 않습니다. 그 과정은 여전히 ​​10 초 정도 느립니다. 어떤 아이디어 ?? 그건 그렇고,이 테이블에는 거의 3.5 수백만 행이 있습니다. 그러나 나는 그 문제가 운영자가 아니고 그 이상이라는 것을 안다.하지만 내가 할 수있는 일이 무엇인지 모르겠다. 도움 주셔서 감사합니다.

답변

0

몇 가지 질문에서 명확하지 않다 :

는 최대 1 IP를 보면 10 초가 걸릴 수 있나요?

도시를 찾으려는 IP 주소는 몇 개입니까?

maxmind CSV 형식으로 만든이 두 테이블이 맞습니까, 아니면 데이터입니까?

maxmind 데이터베이스의 CSV 형식을 사용 했습니까? 바이너리 형식을 사용하는 것이 좋습니다, 훨씬 빠릅니다.

+0

6 백만을 좋아한다. 나는 mysql GIS로 할 수있는 것을 발견했다. 그래서 나는 며칠 안에 그것을 작업 할 것이다. – silgon