Re: A more efficient way?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: A more efficient way?
Дата
Msg-id 19769.1288534247@sss.pgh.pa.us
обсуждение исходный текст
Ответ на A more efficient way?  (James Cloos <cloos@jhcloos.com>)
Список pgsql-sql
James Cloos <cloos@jhcloos.com> writes:
> I've a third-party app which is slower than it ought to be.
> It does one operation in particular by doing a query to get a list of
> rows, and then iterates though them to confirm whether it actually wants
> that row.  As you can imagine that is very slow.

> This query gets the correct data set in one go, but is also slow:

>  select p from m where s = 7 and p not in (select p from m where s != 7);

See if you can recast it as a NOT EXISTS.  NOT IN is hard to optimize
because of its weird behavior with nulls.

If you're working with a less-than-current version of PG, you may
instead have to resort to a left-join-with-is-null locution, ieselect m.p from m left join(select p from m where s !=
7)m2on (m.p=m2.p)where m2.p is null and m.s = 7;
 
but it's hard to wrap your head around that sort of thing, so I'd
advise against using it if you can get decent performance with EXISTS.
        regards, tom lane


В списке pgsql-sql по дате отправления:

Предыдущее
От: James Cloos
Дата:
Сообщение: A more efficient way?
Следующее
От: Viktor Bojović
Дата:
Сообщение: Re: large xml database