3-Way Join Running Sloowww with the Query/Schema
Posted in 1996
Topics: Performance & Tuning, Storage & Space Management, SQL Development & Query Writing, Server Administration, Migration, Import/Export & Data Conversion
I have a query that is returning 1791 rows which consists of a 3-way
join. I have attach a copy of the 3 tables with the query and a copy
of sqexplain.out. I have run the query on an HP h70-2 CPU 9.04 and
HP T500-2 CPU box from Dbaccess using Informix 7.11 UC1. The query
runs in 17 minutes on the H70 and 21 minutes on the T500.
The tables are not that large and it seems like this query should run
a lot faster than it is, especially on a T500.
Any suggestions would be appreciated from the Informix gurus out there
and thanks in advance for any response. Please email and post to the
newsgroup since others will probably be interested in the results.
{ TABLE "bwzrtts".focfaxccna row size = 177 number of columns = 10
index size =
183
}
{ unload file name = focfaxc100.unl number of rows = 1 }
create table "bwzrtts".focfaxccna
(
ccna char(3) not null constraint "bwzrtts".n100_2,
icsc char(4) not null constraint "bwzrtts".n100_3,
compname char(25) not null constraint "bwzrtts".n100_4,
deffaxnum char(15),
specfaxnum char(15),
messfaxnum char(15),
contnamone char(25),
contnamtwo char(25),
contnamthree char(25),
contnamfour char(25),
primary key (ccna,icsc) constraint "bwzrtts".u100_1
) extent size 16 next size 16 lock mode page;
create index "bwzrtts".focfaxccna_idx on "bwzrtts".focfaxccna
(ccna,icsc,contnam
one,
contnamtwo,contnamthree,contnamfour);
{ TABLE "bwzrtts".focmailer row size = 495 number of columns = 18
index size = 1
48
}
{ unload file name = focmail101.unl number of rows = 8991 }
create table "bwzrtts".focmailer
(
asr char(10) not null constraint "bwzrtts".n101_6,
date char(6) not null constraint "bwzrtts".n101_7,
req_string char(50),
reqid char(4),
dest char(10),
attempts integer,
dialstring char(25),
csi char(30),
npages integer,
naks integer,
a_result char(8),
r_result char(8),
tag1 char(25),
tag2 char(25),
method char(8),
options char(256),
mail_type char(8),
timestamp datetime year to fraction(3) not null constraint
"bwzrtts".n101_8,
primary key (asr,date,timestamp) constraint "bwzrtts".u101_5
) extent size 16 next size 16 lock mode page;
create index "bwzrtts".focmailer_idx on "bwzrtts".focmailer
(timestamp,asr,attem
pts,
dialstring,a_result,r_result);
{ TABLE "bwzrtts".focgenerator row size = 217 number of columns = 15
index size
=
333 }
{ unload file name = focgene102.unl number of rows = 999 }
create table "bwzrtts".focgenerator
(
ccna char(3) not null constraint "bwzrtts".n102_10,
icsc char(4) not null constraint "bwzrtts".n102_11,
pon char(16),
asr char(10) not null constraint "bwzrtts".n102_12,
date char(6),
ddate char(6),
initiator char(15),
datetimest datetime year to fraction(3) not null constraint
"bwzrtts".n102_1
3,
machname char(15) not null constraint "bwzrtts".n102_14,
pathname char(60) not null constraint "bwzrtts".n102_15,
filename char(40) not null constraint "bwzrtts".n102_16,
faxnumber char(15),
errortype integer not null constraint "bwzrtts".n102_17,
ban char(12),
cls char(1),
primary key (ccna,icsc,asr,datetimest) constraint "bwzrtts".u102_9
) extent size 16 next size 16 lock mode page;
create index "bwzrtts".focgenerator_idx on "bwzrtts".focgenerator
(ccna,icsc,
asr,datetimest,errortype,pon,date,ddate,machname,pathname,
filename,ban,cls);
SELECT FocFaxCCNA.ccna,
FocFaxCCNA.icsc,
FocFaxCCNA.contnamone,
FocFaxCCNA.contnamtwo,
FocFaxCCNA.contnamthree,
FocFaxCCNA.contnamfour,
FocGenerator.pon,
FocGenerator.asr,
FocGenerator.date,
FocGenerator.ddate,
FocGenerator.machname,
FocGenerator.pathname,
FocGenerator.filename,
FocGenerator.ban,
FocGenerator.cls,
FocGenerator.errortype,
FocMailer.attempts,
FocMailer.a_result,
FocMailer.r_result,
FocMailer.timestamp,
FocMailer.dialstring
FROM FocFaxCCNA,FocGenerator,FocMailer
WHERE (FocFaxCCNA.Ccna = FocGenerator.Ccna
AND FocFaxCCNA.Icsc = FocGenerator.Icsc
AND (FocMailer.Asr = FocGenerator.Asr OR FocMailer.Asr=0000000000))
AND (((FocGenerator.DateTimeSt >= '95-12-27 13:12:56.000')
AND (FocGenerator.DateTimeSt <= '95-12-28 13:12:56.000'))
OR ((FocMailer.timestamp >= '95-12-27 13:12:56.000')
AND (FocMailer.timestamp <= '95-12-28 13:12:56.000')))
ORDER BY FocGenerator.errortype ASC,
FocFaxCCNA.ccna ASC,
FocFaxCCNA.icsc ASC;
QUERY:
------
SELECT FocFaxCCNA.ccna,
FocFaxCCNA.icsc,
FocFaxCCNA.contnamone,
FocFaxCCNA.contnamtwo,
FocFaxCCNA.contnamthree,
FocFaxCCNA.contnamfour,
FocGenerator.pon,
FocGenerator.asr,
FocGenerator.date,
FocGenerator.ddate,
FocGenerator.machname,
FocGenerator.pathname,
FocGenerator.filename,
FocGenerator.ban,
FocGenerator.cls,
FocGenerator.errortype,
FocMailer.attempts,
FocMailer.a_result,
FocMailer.r_result,
FocMailer.timestamp,
FocMailer.dialstring
FROM FocFaxCCNA,FocGenerator,FocMailer
WHERE (FocFaxCCNA.Ccna = FocGenerator.Ccna
AND FocFaxCCNA.Icsc = FocGenerator.Icsc
AND (FocMailer.Asr = FocGenerator.Asr OR FocMailer.Asr=0000000000))
AND (((FocGenerator.DateTimeSt >= '95-12-27 13:12:56.000')
AND (FocGenerator.DateTimeSt <= '95-12-28 13:12:56.000'))
OR ((FocMailer.timestamp >= '95-12-27 13:12:56.000')
AND (FocMailer.timestamp <= '95-12-28 13:12:56.000')))
ORDER BY FocGenerator.errortype ASC,
FocFaxCCNA.ccna ASC,
FocFaxCCNA.icsc ASC
Estimated Cost: 61582
Estimated # of Rows Returned: 242
Temporary Files Required For: Order By
1) bwzrtts.focfaxccna: INDEX PATH
(1) Index Keys: ccna icsc contnamone contnamtwo contnamthree
contnamfour (
Key-Only)
2) bwzrtts.focgenerator: INDEX PATH
(1) Index Keys: ccna icsc asr datetimest
Lower Index Filter: (bwzrtts.focgenerator.icsc =
bwzrtts.focfaxccna.icsc
AND bwzrtts.focgenerator.ccna = bwzrtts.focfaxccna.ccna )
3) bwzrtts.focmailer: INDEX PATH
Filters: ((bwzrtts.focmailer.asr = bwzrtts.focgenerator.asr OR
bwzrtts.focma
iler.asr = 0 ) AND ((bwzrtts.focgenerator.datetimest >=
datetime(1995-12-27 13:1
2:56.000) year to fraction(3) AND bwzrtts.focgenerator.datetimest <=
datetime(19
95-12-28 13:12:56.000) year to fraction(3) ) OR
(bwzrtts.focmailer.timestamp >=
datetime(1995-12-27 13:12:56.000) year to fraction(3) AND
bwzrtts.focmailer.