Thread: alter table TBL add constraint TBL_FK foreign key ... very slow
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
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.
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 | +------------------------------------------------------------+