|
MySQL.RU - Webboard
Вернуться
Я удивлен чем удалось загрузить MySQL (Кирилл) 09/02/2006 - 09:10:57
Re: Я удивлен чем удалось загрузить MySQL (DiGiTAL) 09/02/2006 - 18:37:08
Re: Я удивлен чем удалось загрузить MySQL (Dinky) 09/02/2006 - 20:05:31
Re: уж0с (Dinky) 09/02/2006 - 20:09:05
Re: уж0с (DiGiTAL) 09/02/2006 - 20:41:51
Re: уж0с (Dinky) 09/02/2006 - 21:50:21
> Original message text:
> From: Кирилл - 09/02/2006 - 09:10:57
> Subject:Я удивлен чем удалось загрузить MySQL
> -----------------
> Здравствуйте.
>
> Вот встала задача определения города по IP.
> Есть таблица (events), в которой хранятся нужные IP.
> Есть таблица (ip_table, в ней 42 тыщщи рядов), в которой есть интервалы апишников в целочисленном представлении (start_ip, end_ip) и ID сопоставленного города.
> Есть таблица (cities), в которой по ID города можно определить сам город.
>
> Конкретизируем. Надо получить все уникальные IP и их города на определенную дату. Запрос ниже. В таблицах по всем использованным в запросе полям стоят индексы.
> Проблема в том, что на хостинге это чудо секунд 10 думает, потом выдает Server shutdown in progress. Обращался к хостингу, они говорят что у меня слишком жирный запрос, надо, мол, его оптимизировать. И как ЭТО можно соптимизировать?
> Тут еще такой вопрос, что это все цветочки, мне бы надо еще JOIN, т.к. могут попасться такие айпишники, которых в базе городов не будет, а выводить их все равно надо. Пока привел упрощенный вариант, хоть бы его заставить работать.
>
> SELECT DISTINCT a.ip, c.city
> FROM events a, ip_table b, cities c
> WHERE
> DATE_FORMAT(DATE_ADD( a.timestamp, INTERVAL 3 HOUR), '%d.%m.%Y') = '08.02.2006'
> AND
> ( INET_ATON( a.ip ) BETWEEN b.start_ip AND b.end_ip)
> AND
> c.city_ID = b.city
>
From: Dinky - 09/02/2006 - 20:09:05
Subject:уж0с
-----------------
> DATE_FORMAT(DATE_ADD( a.timestamp, INTERVAL 3 HOUR), '%d.%m.%Y') = '08.02.2006'
это ж Вы заставляете mysql КАЖДУЮ запись просчитать в таблице events!
заведите рядом индексированое поле date
или хотя бы пропишите интервал:
a.timestamp BETWEEN '2006-02-08 00:00:00' AND '2006-02-08 23:59:59'
хоть по индексу будет искать
--
Dmitry
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
26442
|
|