Фильтр поиска по ip2country

Статус
В этой теме нельзя размещать новые ответы.

beonard6

Постоялец
Регистрация
1 Июн 2009
Сообщения
57
Реакции
3
Вопрос: Фильтр поиска по ip2country

есть две базы
база с пользователями (ип, логин, прочее)
база с зонами (начальный ип, конечный ип, прочее)
в базе с зонами есть 4 столбца
первые 2 с обычными начальными ip и конечными
вторые 2 с тем же ip в числовом формате (пропуск через ip2long/INET_ATON
и есть короткий простенький запрос
который при сканировании 17 результатов (фильтр по первой букве логина) думает 7 секунд
в остальных случаях думает over несколько минут, что категорически непримемлимо
сие чудо здесь:
Код:
SELECT `user`.`POINTS`, `user`.`NAME`, INET_NTOA(`user`.`IPAddress`) AS `IP`
FROM `database1`.`user`
INNER JOIN `database2`.`ip2country` ON `user`.`IPAddress` BETWEEN `ip2country`.`begin_ip_num` AND `ip2country`.`end_ip_num`
WHERE `user`.`STEAMID` REGEXP '^z' AND `ip2country`.`country_code`='RU'
ORDER BY `user`.`POINTS`
LIMIT 0,100
что я делаю не так?
explain:
Код:
id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra 
1	SIMPLE	user	index	IPAddress	POINTS	4	NULL	4596	 
1	SIMPLE	ip2country	ref	begin_ip_num,country_code	country_code	12	const	3202	Using where
 
Попробуй индекс по полям
`user`.`STEAMID` +`ip2country`.`country_code`
 
`user`.`STEAMID` REGEXP '^z' попбробуй заменить на LEFT(`user`.`STEAMID`,1)='z'. Проверка та же но на большой массе данных эта будет работать гораздо быстрее. Не совсем ясно зачем таблицы раскидывать по разным базам. Это тоже может влиять на скорость. Индексы обязательно на все поля по которым фильтруете если таблицы очень большие тогда попробуйте только поля по которым идёт объединение.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху