Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Range поиск по двум полям / 5 сообщений из 5, страница 1 из 1
06.09.2004, 20:04
    #32682234
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Range поиск по двум полям
С подобной проблемой, наверняка, сталкивались, поэтому хотелось бы услышать ваши советы.
Есть таблица
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE public.blocks
(
  loc_id int8 NOT NULLб
  start_ip_num int8,
  end_ip_num int8
) WITHOUT OIDS;
В ней прописаны соответствия диапазона ИП некоторой местности. Содержит около 2-х миллионов записей.

Меня интересует оптимизация вот такого запроса
Код: plaintext
1.
2.
3.
4.
5.
6.
select l.*
from locations l, blocks b
where
  l.loc_id=b.loc_id
  AND b.start_ip_num < число
  AND b.end_ip_num > число

На моём железе одну запись ищет ~1.5 сек.
В плане оптимизации по blocks идёт полное сканирование, индексы игнорируются полностью.
Как ускорить выборку?
...
Рейтинг: 0 / 0
06.09.2004, 20:30
    #32682254
Niemi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Range поиск по двум полям
Попробуй добавить ORDER BY и посмотреть.
...
Рейтинг: 0 / 0
06.09.2004, 22:30
    #32682288
Sad Spirit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Range поиск по двум полям
mwolfС подобной проблемой, наверняка, сталкивались
С ней сталкиваются настолько часто, что она даже есть в официальном FAQ (см. конец ответа).
...
Рейтинг: 0 / 0
06.09.2004, 22:32
    #32682289
Sad Spirit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Range поиск по двум полям
...правда там не очень понятно. "число" надо привести к int8:
Код: plaintext
1.
2.
3.
4.
5.
6.
select l.*
from locations l, blocks b
where
  l.loc_id=b.loc_id
  AND b.start_ip_num < число::int8
  AND b.end_ip_num > число::int8
...
Рейтинг: 0 / 0
07.09.2004, 12:59
    #32683088
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Range поиск по двум полям
Sad Spirit...правда там не очень понятно. "число" надо привести к int8:

Мдяяя.
А я думал, что всё в этой жизни видел, но чтоб ТАКОЕЕЕЕ...
Большое спасибо за подсказку. Индексы начали использоваться, запрос выполняется за 30 мс.

То Niemi: с ORDER BY не совсем понял, это что даст?
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Range поиск по двум полям / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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