From: | "Ivan Zolotukhin" <ivan(dot)zolotukhin(at)gmail(dot)com> |
---|---|
To: | Serik <uge(at)pochtamt(dot)ru> |
Cc: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: [pgsql-ru-general] операция << для типа INET и проверка в IN |
Date: | 2007-06-30 16:36:58 |
Message-ID: | 751e56400706300936y797dea72m634b99803d7861ac@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-ru-general |
стандартное решение здесь WHERE EXISTS
разве оно дает плохой план выполнения запроса?
On 6/27/07, Serik <uge(at)pochtamt(dot)ru> wrote:
>
>
> Добрый день !
>
>
>
> есть запрос
>
>
>
> SELECT count(d_ip)
> FROM traf_raw
> WHERE (d_ip << '192.168/16'::inet )
>
>
>
> нужно '192.168/16'::inet заменить результатом выборки
>
>
>
> select subnet from network
>
>
>
> т.о. напрашивается проверка с IN, типа
>
> WHERE (d_ip IN (select subnet from network) )
>
> вопрос: как сюда вставить "<<"
>
> чтобы была проверка адреса по маске ?
>
>
>
> обходные варианты
>
>
>
> SELECT count(d_ip)
> FROM traf_raw tr
> WHERE (exists (select 1 from network n where tr.d_ip << n.subnet limit 1) )
>
>
>
>
> и
>
>
>
> select count(d_ip)
> from network n
> left join traf_raw tr on (tr.d_ip << n.subnet)
>
>
>
>
> рассматривались, но есть надежда, что запрос с IN будет быстрее :)
>
>
>
> d_ip и subnet типа inet,
>
>
> в таблице network 2 записи, в traf_raw несколько миллионов,
>
> PostgreSQL 8.1.1
From | Date | Subject | |
---|---|---|---|
Next Message | Evgeny M. Baldin | 2007-07-02 06:30:01 | История о PostgreSQL |
Previous Message | Serik | 2007-06-27 05:08:06 | операция << для типа INET и проверка в IN |