Skip site navigation (1) Skip section navigation (2)

Slow Foreign Key

From: Ricardo Vaz Mannrich <rvm_l1(at)silcom(dot)com(dot)br>
To: pgsql-admin(at)postgresql(dot)org
Subject: Slow Foreign Key
Date: 2004-03-22 18:24:58
Message-ID: 1079979898.5609.15.camel@paranagua.silcom (view raw or flat)
Thread:
Lists: pgsql-admin
I'm trying to do a lot of inserts on a detail table, but with foreign
key schema it's too slow.

I made few tests.

1) Master table with 290,000 rows and 4 columns (primary key is SERIAL)
2) Detail table now with 1,300,000 rows and 3 columns (primary key is
SERIAL and I have a column master_id here pointing to a master table
record).
3) If I use:
    ALTER TABLE detail ADD CONSTRAINT master_fk FOREIGN KEY master_id
REFERENCES master

I get 5 INSERTs per second using this:

INSERT INTO master VALUES (DEFAULT, 'Random 1', 'Random 2', 'Random 3');
SELECT CURRVAL('master_master_id_seq');
INSERT INTO detail VALUES (DEFAULT, XX, 999);
(random number of detail records, alternating with a insert into master)

I can insert just 5 rows/second.

4) So, I change it:
    ALTER TABLE detail DROP CONSTRAINT master_fk;

And run INSERTs again.

Now, I have 1000 rows/second (with SELECT checking before every INSERT).

Is FOREIGN KEY so slow like that?  What can I change in PostgreSQL
configuration?

Note that I run some VACUUM and CLUSTER. This let my INSERTs a very
little fast.

My (test) system is:

Linux 2.4.21
PostgreSQL 7.4.1
Pentium IV 1.8Ghz
256MB RAM
HD IDE

Could anyone help me?

-- 
Ricardo Vaz Mannrich <rvm_l1(at)silcom(dot)com(dot)br>


Responses

pgsql-admin by date

Next:From: Tom LaneDate: 2004-03-22 20:56:03
Subject: Re: Slow Foreign Key
Previous:From: Mark M. HuberDate: 2004-03-22 17:13:06
Subject: Re: backup and recovery

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group