Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать / 3 сообщений из 3, страница 1 из 1
20.06.2008, 20:46
    #35386112
user1235
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать
Есть таблицы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT * FROM t1;
       ip
----------------
  192 . 168 . 0 . 0 / 16 
  192 . 168 . 1 . 0 / 24 
( 2  rows)

SELECT * FROM t2;
     ip
-------------
  192 . 168 . 1 . 1 
( 1  row)
Делаю запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 EXPLAIN SELECT t1.ip FROM t2 LEFT OUTER JOIN t1 ON (t1.ip>>=t2.ip AND masklen(t1.ip)=(SELECT max(masklen(t1.ip)) FROM t1 WHERE t1.ip>>=t2.ip));
                                   QUERY PLAN
--------------------------------------------------------------------------------
 Merge Left Join  (cost= 181 . 86 .. 277555 . 26  rows= 4290  width= 64 )
   Merge Cond: (((subplan)) = (masklen(public.t1.ip)))
   Join Filter: (public.t1.ip >>= t2.ip)
   ->  Sort  (cost= 90 . 93 .. 94 . 20  rows= 1310  width= 32 )
         Sort Key: ((subplan))
         ->  Seq Scan on t2  (cost= 0 . 00 .. 23 . 10  rows= 1310  width= 32 )
               SubPlan
                 ->  Aggregate  (cost= 28 . 02 .. 28 . 03  rows= 1  width= 32 )
                       ->  Seq Scan on t1  (cost= 0 . 00 .. 26 . 38  rows= 655  width= 32 )
                             Filter: (ip >>= $ 0 )
   ->  Sort  (cost= 90 . 93 .. 94 . 20  rows= 1310  width= 32 )
         Sort Key: (masklen(public.t1.ip))
         ->  Seq Scan on t1  (cost= 0 . 00 .. 23 . 10  rows= 1310  width= 32 )
( 13  rows)
Запрос выдает наиболее точный адрес (сеть) из таблицы t1, соответствующий адресу из таблицы t2.
На больших объемах данных работает оч. медленно. Как можно по-другому составить этот запрос?
Заранее спасибо.
...
Рейтинг: 0 / 0
21.06.2008, 22:12
    #35386737
Gold_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать
Сделайте запрос с EXPLAIN ANALYZE и приведите результат
...
Рейтинг: 0 / 0
23.06.2008, 16:34
    #35388939
Funny_Falcon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать
Код: plaintext
1.
2.
3.
4.
5.
SELECT DISTINCT ON (t2.ip) t1.ip, t2.ip
FROM t2 
LEFT JOIN t1 
   ON t1.ip>>=t2.ip
ORDER BY t2.ip, masklen(t1.ip) DESC
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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