Hi Kevin

Thanks for your response. I tried doing what you suggested so that table
now has a primary key of ' CONSTRAINT data_area_pkey PRIMARY KEY(area_id ,
data_id ); ' and I've added the INDEX of 'CREATE INDEX
data_area_data_id_index ON data_area USING btree (data_id );' unfortunately
it hasn't resulted in an improvement of the query performance. Here is the
explain http://explain.depesz.com/s/tDL I think there is no performance
increase because its now not using primary key and just using the index on
the data_id. Have I done what you suggested correctly? Any other
suggestions?

Thanks very much for your help,

Mark



On 5 April 2013 17:37, Kevin Grittner <kgri...@ymail.com> wrote:

> Mark Davidson <m...@4each.co.uk> wrote:
>
> >   CONSTRAINT data_area_pkey PRIMARY KEY (data_id , area_id ),
>
> So the only index on this 250 million row table starts with the ID
> of the point, but you are joining to it by the ID of the area.
> That's requires a sequential scan of all 250 million rows.  Switch
> the order of the columns in the primary key, add a unique index
> with the columns switched, or add an index on just the area ID.
>
> Perhaps you thought that the foreign key constraints would create
> indexes?  (They don't.)
>
> --
> Kevin Grittner
> EnterpriseDB: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>

Reply via email to