Эффективный запрос ip-> location - PullRequest
5 голосов
/ 24 октября 2010

У меня есть две таблицы: одна - ip_group_city из ipinfodb.com , содержащая номера ip_start для определения местоположения IP-адресов, а другая - «посещения» с информацией о посетителе веб-сайта, содержащем столбец «ip».

Мне нужно выбрать топ-10 region_code (из ip_group_city), проверяя region_code для каждого IP-адреса из таблицы «посещений».

Сейчас я загружаю все IP-адреса из «посещений» в массив и используюэта информация IP для запроса ip_group_city по:

SELECT region_code
FROM ip_group_city
WHERE ip_start <= INET_ATON(IP_FROM_ARR)
ORDER BY ip_start DESC LIMIT 1

Я не могу создать какой-то вложенный запрос, чтобы выполнить работу за меня, потому что сейчас все идет немного медленно :) - это занимаетдо 30 с на моем ноутбуке xampp (AMD Turion x2 2 ГГц, работает под управлением Windows 7 Ultimate, 64-битная версия)

Вот таблица с IP-адресами (посещения)

CREATE TABLE IF NOT EXISTS `visits` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`clientid` mediumint(8) unsigned NOT NULL,
`ip` varchar(15) NOT NULL,
`url` varchar(512) NOT NULL,
`client_version` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=49272 ;

Спасибо

Ответы [ 4 ]

2 голосов
/ 02 ноября 2010

Поскольку вы сказали, что приветствуются другие решения ...

Возможно, вы захотите проверить MaxMind . У них хороший поиск по стране и городу по IP. Вы можете установить плагин Apache или PHP, чтобы сделать это быстро - даже не нужно обрабатывать базу данных самостоятельно.

2 голосов
/ 28 октября 2010

Чтобы проиндексировать вашу таблицу:

ALTER TABLE `ip_group_city` ADD INDEX ( `ip_start` )

Чтобы получить 10 лучших кодов регионов:

SELECT igc.region_code
FROM ip_group_city igc
JOIN visits v ON igc.ip_start = v.ip
GROUP BY igc.region_code
ORDER BY COUNT(*) DESC
LIMIT 10
0 голосов
/ 16 июня 2011

Вы можете проверить это сообщение:

Расположение с IP-адреса

0 голосов
/ 31 октября 2010
ALTER TABLE `ip_group_city` ADD INDEX ( `ip_start` )

это все, что я говорю.обязательно используйте btree, а не hash: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...