Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / join и диапазон значений / 4 сообщений из 4, страница 1 из 1
24.06.2004, 11:46
    #32575190
Wanenhalf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join и диапазон значений
наверняка кто-нибуть уже сталкивался с этой задачей..

есть две таблицы.
statistic_ip содержит интересующее нас поле IP.
geo_ip - содержит три поля:
первое - некий ID,
второе и третье - диапазон значений.

Нужно одним запросом, получить соответствие содержимого statistic_ip и ID из geo_ip

скорее всего запрос должен быть:
Код: plaintext
1.
2.
3.
4.
5.
select
ip.customer, 
ip.ip,
city.id
from statistic_ip as ip left join geo_ip as city on (city.first<ip.ip and city.last>ip.ip)

но этот запрос выполняется очень долго (как минимум 626 секунд - больше я не стал ждать)
в чем причины такого долгого выполнения, и есть ли возможность переделать запрос, структуры таблиц, что бы решить проблему?

структура statistic_ip:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE statistic_ip (
  ip int( 10 ) unsigned NOT NULL default '0',
  `load` int( 7 ) NOT NULL default '0',
  uid_site int( 11 ) NOT NULL default '0',
  customer int( 11 ) NOT NULL default '0',
  `date` int( 10 ) NOT NULL default '0',
  PRIMARY KEY  (ip,uid_site,date)
) TYPE=MyISAM;

структура geo_ip:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE geo_ip (
  id int( 8 ) NOT NULL default '0',
  first int( 11 ) NOT NULL default '0',
  last int( 11 ) NOT NULL default '0',
  KEY first (first),
  KEY last (last),
  KEY firstlast (first,last)
) TYPE=MyISAM;

спасибо.
...
Рейтинг: 0 / 0
24.06.2004, 12:26
    #32575301
Wanenhalf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join и диапазон значений
explain вот что говорит:

table | possible_keys | key | rows
ip | | | 24622
city | first,last,firstlast | | 34636


на момент завершения процесса выполнения запроса (я так никогда и недождался нормального выплнения) лог длинных запросов (long_query_time) выдает:
# Query_time: 236 Lock_time: 0 Rows_sent: 2057 Rows_examined: 55577828

огромное число строк.
откуда он их берет?
...
Рейтинг: 0 / 0
24.06.2004, 14:48
    #32575666
Хрен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join и диапазон значений
Правильно выдает такое число строк.
По explain получается что для _каждой_ записи из ip (24622 записи) надо проверить примерно 34636 записей из city.. Вот и считайте сколько записей = 24622*34636

Какая версия mysql? Случаем не 3.23 ?
...
Рейтинг: 0 / 0
25.06.2004, 10:05
    #32576737
Wanenhalf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join и диапазон значений
версия - 4.0.16
а понимаю, что число получается неким произведением возможных строк.

я думаю вопрос сужается до:
какие индексы ввести в city (geo_ip), что бы запрос диапазона '<' '>' сразу находил строку, без проверки всех?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / join и диапазон значений / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]