On Mon, Oct 5, 2009 at 2:52 PM, Matthew Wakeling <matt...@flymine.org>wrote:

>
> mnw21-modmine-r13features-copy=# select count(*) from project;
>  count
> -------
>    10
> (1 row)
>
> mnw21-modmine-r13features-copy=# select count(*) from intermineobject;
>  count
> ----------
>  26344616
> (1 row)
>
> mnw21-modmine-r13features-copy=# \d intermineobject;
> Table "public.intermineobject"
>  Column |  Type   | Modifiers
> --------+---------+-----------
>  object | text    |
>  id     | integer | not null
>  class  | text    |
> Indexes:
>    "intermineobject_pkey" UNIQUE, btree (id)
>
> mnw21-modmine-r13features-copy=# explain select * from project where id NOT
> IN (SELECT id FROM intermineobject);
>                                     QUERY PLAN
>
> ------------------------------------------------------------------------------------
>  Seq Scan on project  (cost=1476573.93..1476575.05 rows=5 width=183)
>   Filter: (NOT (hashed SubPlan 1))
>   SubPlan 1
>     ->  Seq Scan on intermineobject  (cost=0.00..1410720.74 rows=26341274
> width=4)
> (4 rows)
>
> This query plan seems to me to be a little slow. Surely it could iterate
> through the ten project rows and perform ten index lookups in the big table?
>
>
try using join instead of 'not in'..


select p.* from project p left join intermineobject i on i.id=p.id where
i.id is null;


-- 
GJ

Reply via email to