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
|
Список | 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 по дате отправления: