Unable to get acceptable performance from EXCEPT

Поиск
Список
Период
Сортировка
От Alfred Perlstein
Тема Unable to get acceptable performance from EXCEPT
Дата
Msg-id 20000510153511.N28180@fw.wintelcom.net
обсуждение исходный текст
Ответы Re: Unable to get acceptable performance from EXCEPT  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
=# select count(*) from ref_old;count 
-------10595
(1 row)

=# select count(*) from ref_new;count 
-------22997
(1 row)

=# select ref_id from ref_old except select ref_id from ref_new;

Takes over 10 minutes, probably closer to half an hour.

I've also tried using 'NOT IN ( select ref_id from ref_new )'

ref_id is an int4, this is on Postgresql 7.0.

This confuses me because the way I'd plan to execute this query would
be something like this: (pseudo code)

result retval;
sort(ref_old);
sort(ref_new);
i = k = 0;
while (i < count(ref_old)) {while(ref_old[i] > ref_new[k])    k++;while(ref_old[i] == ref_new[k])
i++;while(ref_old[i]< ref_new[k])    store(&retval, ref_old[i++]);
 
}
return (retval);

I can't imagine this algorithm would take over 10 minutes on my
hardware.  Can anyone shed some light on what's going on here?

Is there a way to formulate my SQL to get Postgresql to follow
this algorithm?

thanks,
-- 
-Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org]
"I have the heart of a child; I keep it in a jar on my desk."


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

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: setproctitle() no longer used?
Следующее
От: The Hermit Hacker
Дата:
Сообщение: Re: setproctitle() no longer used?