Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса / 1 сообщений из 1, страница 1 из 1
27.11.2004, 19:05
    #32802603
tana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Добрый день!
Проблема следующая: есть две таблицы. В первой хранятся IP-шники (int unsigned not null default '0'), индекс по IP есть. IP отсортированы в порядке возрастания.
Из второй таблицы в цикле для каждого IP выбирается страна:

select country_code2 from iptocountry where '3282182154'>=ip_from AND '3282182154'<=ip_to

Таких однотипных запросов очень много (несколько тысяч) и делаются они в цикле.
Во второй таблице поля ip_from и ip_to - граничные значения интервала IP страны, также int unsigned not null default '0'. Есть три индекса: по полю ip_from, по полю ip_to и по обоим этим полям (test). Все индексы UNIQUE (записи действительно уникальны). Строк во второй таблице почти 53 тыс., поэтому брать всю таблицу и разбираться с ней в PHP - нереально.
Работает все это весьма долго. Оказалась следующая ситуация: время выполнения вышеприведенных запросов колеблется от 0.004 до 0.4 сек (это при том, что еще каждый раз делается mysql_free_result; без него один запрос до 2 сек мог выполняться!). Проверили explain'ом. Логично было бы предположить, что должен использоваться всегда ключ test. Но, оказывается, примерно первая треть запросов (которая занимает не очень много времени) выполняется с ключом test (т.е. по обоим полям), причем чем больше IP, тем больше строк выбирается в индексе. Когда количество строк переваливает за треть, MySQL перестает (как и написано в документации) использовать ключ. Таким образом вторая часть - самая длительная - вообще не использует никакого ключа (даже при явном указании на него use index test), и естественно выборка идет All. Третья часть использует ключ ip_to (время опять снижается).

Возможно, кто-то уже сталкивался с этой ситуацией. Подскажите, каким образом можно либо оптимизировать запрос, либо ускорить выполнение данного куска каким-либо методом.
Заранее благодарна
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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