Search Postgresql Archives

Re: Indexing Foreign Key Columns

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Josh Trutwin <josh@xxxxxxxxxxxxxxxxxxx> writes:
> I am curious if there are any rules of thumb for when to index a
> foreign key column?

(You realize of course that there's already an index on the referenced
column, else you wouldn't have been allowed to reference it.)

You need an index on the referencing column unless the referenced table
is pretty static: DELETEs in the referenced table will be real slow
without it, and also UPDATEs that change the referenced column.  However
there are applications where this never happens, or so infrequently that
it's not worth paying to maintain an extra index on the referencing
table.

As far as actual joins go, the only case where an index on the
referencing column is likely to be tremendously useful is where you are
selecting a small number of rows using a constraint on the *referenced*
table.  For instance

	select ... from pktable left join fktable on (pkcol = fkcol)
	where pktable.somecol = something

In this situation a sensible plan is a nestloop with the pktable on the
outside (perhaps searched via an index on somecol) and then using an
index on fkcol to probe into fktable for matches.

If you don't do anything like that, and you don't change or delete pk
keys, then you probably don't need an index.

			regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faq

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux