Thread: alter table TBL add constraint TBL_FK foreign key ... very slow

alter table TBL add constraint TBL_FK foreign key ... very slow

From
Minghann Ho
Date:
Hi all,

I've experienced very slow performance to add foreign key constraints using
ALTER TABLE ADD CONSTRAINT FOREIGN KEY ...

After using COPY ... FROM to load the base tables, I started to build the
referential integrity between tables.
I have 3 tables: T1 (6 million records), T2 (1.5 million records) and T3 (0.8
million records).
One of the RI - foreign key (T1 -> T2) constraint took about 70 hrs to build.
The other RI - foreign key (T1 -> T3) constraint took about 200 hrs and yet
completed!! (compound foreign key)

I tried to use small subset of the tables of T2 and T3 to do the testing.
An estimation show that it need about 960 hrs to build the RI - foreign key
constraints on table T1 -> T3 !!!

I've read in the archives that some people suffered slow performance of this
problem in Aug 2000, but there was no further information about the solution.

Please anyone who has experience in this issues can give me some hint.

Thanks

Hans

Re: alter table TBL add constraint TBL_FK foreign key ...

From
Stephan Szabo
Date:
On Wed, 1 Jan 2003, Minghann Ho wrote:

> I've experienced very slow performance to add foreign key constraints using
> ALTER TABLE ADD CONSTRAINT FOREIGN KEY ...
>
> After using COPY ... FROM to load the base tables, I started to build the
> referential integrity between tables.
> I have 3 tables: T1 (6 million records), T2 (1.5 million records) and T3 (0.8
> million records).
> One of the RI - foreign key (T1 -> T2) constraint took about 70 hrs to build.
> The other RI - foreign key (T1 -> T3) constraint took about 200 hrs and yet
> completed!! (compound foreign key)
>
> I tried to use small subset of the tables of T2 and T3 to do the testing.
> An estimation show that it need about 960 hrs to build the RI - foreign key
> constraints on table T1 -> T3 !!!

It's running the constraint check for each row in the foreign key table.
Rather than using a call to the function and a select for each row, it
could probably be done in a single select with a not exists subselect, but
that hasn't been done yet.  There's also been talk about allowing some
mechanism to allow the avoidance of the create time check, but I don't
think any concensus was reached.


Re: alter table TBL add constraint TBL_FK foreign key

From
Ron Johnson
Date:
On Tue, 2002-12-31 at 21:32, Minghann Ho wrote:
> Hi all,
>
> I've experienced very slow performance to add foreign key constraints using
> ALTER TABLE ADD CONSTRAINT FOREIGN KEY ...
>
> After using COPY ... FROM to load the base tables, I started to build the
> referential integrity between tables.
> I have 3 tables: T1 (6 million records), T2 (1.5 million records) and T3 (0.8
> million records).
> One of the RI - foreign key (T1 -> T2) constraint took about 70 hrs to build.
> The other RI - foreign key (T1 -> T3) constraint took about 200 hrs and yet
> completed!! (compound foreign key)
>
> I tried to use small subset of the tables of T2 and T3 to do the testing.
> An estimation show that it need about 960 hrs to build the RI - foreign key
> constraints on table T1 -> T3 !!!
>
> I've read in the archives that some people suffered slow performance of this
> problem in Aug 2000, but there was no further information about the solution.
>
> Please anyone who has experience in this issues can give me some hint.

Silly question: Are T2 & T3 compound-key indexed on the relevant foreign
key fields (in the exact order that they are mentioned in the ADD
CONSTRAINT command)?  Otherwise, for each record in T1, it is scanning
T2 1.5M times (9E12 record reads!), with a similar formula for T1->T3.

--
+------------------------------------------------------------+
| Ron Johnson, Jr.     mailto:ron.l.johnson@cox.net          |
| Jefferson, LA  USA   http://members.cox.net/ron.l.johnson  |
|                                                            |
| "Basically, I got on the plane with a bomb. Basically, I   |
|  tried to ignite it. Basically, yeah, I intended to damage |
|  the plane."                                               |
|    RICHARD REID, who tried to blow up American Airlines    |
|                  Flight 63                                 |
+------------------------------------------------------------+