Re: count(*), EXISTS, indexes

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: count(*), EXISTS, indexes
Дата
Msg-id 13918.1050095452@sss.pgh.pa.us
обсуждение исходный текст
Ответ на count(*), EXISTS, indexes  (Itai Zukerman <zukerman@math-hat.com>)
Ответы Re: count(*), EXISTS, indexes  (Itai Zukerman <zukerman@math-hat.com>)
Список pgsql-sql
Itai Zukerman <zukerman@math-hat.com> writes:
> Define:
>   CREATE TABLE A (x int PRIMARY KEY, real v);
>   CREATE TABLE B (x int);

> I'd like to calculate:
>   SELECT sum(v) FROM A WHERE EXISTS (SELECT 1 FROM B WHERE A.x=B.x);
> ...but then it won't use the primary key index on A.x.

In CVS tip (7.4-to-be) I think

SELECT sum(v) FROM A WHERE A.x IN (SELECT B.x FROM B);

would probably work well.  In current releases I think all you can do is
add an index to B.x and settle for the EXISTS() approach.

> PS.  B is relatively small, a few thousand rows, while A has well over
> 500,000 rows.  The DISTINCT A.x should be about 10,000-50,000.

BTW, how can a PRIMARY KEY column have fewer DISTINCT values than there
are rows?
        regards, tom lane



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

Предыдущее
От: Itai Zukerman
Дата:
Сообщение: Re: count(*), EXISTS, indexes
Следующее
От: Itai Zukerman
Дата:
Сообщение: Re: count(*), EXISTS, indexes