I have a small company growing fast, selling a product based largely on Postgres. We have a rapidly growing database with (currently) 117 tables. Our primary server, an aging system based around an IDE, 2.4 Ghz P4, is being replaced by a new, 10k SCSI, dual-proc AMD opteron/64, with 4 GB of ECC RAM. At just about every task, the newer machine just blows away the P4. Rebuilding the database happens in < 1 minute, instead of nearly 1/2 hour! Copying GB of data files is blazing fast! But, the real money shot is a single query. It's big, nasty, and complex, and hit pretty hard. It's not IO bound, it is clearly CPU bound. I've allocated up to 3 GB of RAM for pg, and tweaked the shmmax and shared_buffers. And, it's exactly as fast on the new, dual-proc Opteron as the aging P4. 2.2 seconds. It's literally within 1 ms time! (2,206 ms vs 2,207 ms) Throwing more RAM at it makes no difference. WTF??!?!? A few questions: 1) Let's assume that I have some multipile foreign keys, and I join on three values. For example: Create table gangsters ( name varchar not null, birthdate integer not null, shirtnumber integer not null, primary key (name, birthdate, shirtnumber); create table children ( father_name varchar not null, father_bd integer not null, father_shirtnumber integer not null, birthdate integer not null, name varchar not null, foreign key (father_name, father_bd, father_shirtnumber) REFERENCES gangsters(name, birthdate, shirtnumber) ); We have two table declarations, each with implicit indexes: 1) table gangsters has a primary_key index on name, birthdate, shirtnumber. 2) children has an implicit index on father_name, father_bd, father_shirtnumber. (right?) If I were to join on gangster and children, EG: Select gangster.name AS father, gangster.birirthdate AS father_bd, children.name AS kid_name from gangster, children where gangster.name=children.father_name AND gangster.birthdate = children.father_bd AND gangster.shirtnumber=children.father_shirtnumber; Wouldn't this use the indexes implicitly created in the primary_key and foreign key constraints? -- "The best way to predict the future is to invent it." - XEROX PARC slogan, circa 1978