Subject | Firebird 2.5 Beta 2 65267 Full join |
---|---|
Author | gusta1308 |
Post date | 2009-10-13T00:40:53Z |
I do trying run follow query:
SELECT
COALESCE(D1.C1, D2.C1) C1,
COALESCE(D1.C2, D2.C2) C2,
COALESCE(D1.C3, D2.C3) C3,
COALESCE(SUM(D1.D1), 0) T1,
COALESCE(SUM(D2.D2), 0) T2
FROM TD_DATA1 D1
FULL JOIN TD_DATA2 D2
ON D2.C1 = D1.C1
AND D2.C2 = D1.C2
AND D2.C3 = D1.C3
GROUP BY COALESCE(D1.C1, D2.C1),
COALESCE(D1.C2, D2.C2),
COALESCE(D1.C3, D2.C3)
or
SELECT
D1.C1, D2.C1,
D1.C2, D2.C2,
D1.C3, D2.C3,
COALESCE(SUM(D1.D1), 0) T1,
COALESCE(SUM(D2.D2), 0) T2
FROM TD_DATA1 D1
FULL JOIN TD_DATA2 D2
ON D2.C1 = D1.C1
AND D2.C2 = D1.C2
AND D2.C3 = D1.C3
GROUP BY D1.C1, D2.C1,
D1.C2, D2.C2,
D1.C3, D2.C3
The table structure is:
CREATE TABLE TD_DATA1 (
C1 VARCHAR(20) CHARACTER SET WIN1251 NOT NULL COLLATE WIN1251,
C2 INTEGER NOT NULL,
C3 DATE NOT NULL,
D1 FLOAT NOT NULL);
CREATE INDEX IDX_TD_DATA1 ON TD_DATA1(C1,C2,C3);
-- 100,000 rows
CREATE TABLE TD_DATA2 (
C1 VARCHAR(20) CHARACTER SET WIN1251 NOT NULL COLLATE WIN1251,
C2 INTEGER NOT NULL,
C3 DATE NOT NULL,
D2 FLOAT NOT NULL);
CREATE INDEX IDX_TD_DATA2 ON TD_DATA2(C1,C2,C3);
-- 100,000 rows
My machine is Athlon X2 5600+, 2 GB, 90 GB free space, and the query never
finish, otherway is
SELECT
C1,
C2,
C3,
SUM(T1) T1,
SUM(T2) T2
FROM (
SELECT
D1.C1,
D1.C2,
D1.C3,
SUM(D1.D1) T1,
NULL T2
FROM TD_DATA1 D1
GROUP BY D1.C1, D1.C2, D1.C3
UNION ALL
SELECT
D1.C1,
D1.C2,
D1.C3,
NULL T1,
SUM(D1.D2) T2
FROM TD_DATA2 D1
GROUP BY D1.C1, D1.C2, D1.C3
) X
GROUP BY C1, C2, C3
and execute time is 1.203, someone explain me?
Thank for your advance
SELECT
COALESCE(D1.C1, D2.C1) C1,
COALESCE(D1.C2, D2.C2) C2,
COALESCE(D1.C3, D2.C3) C3,
COALESCE(SUM(D1.D1), 0) T1,
COALESCE(SUM(D2.D2), 0) T2
FROM TD_DATA1 D1
FULL JOIN TD_DATA2 D2
ON D2.C1 = D1.C1
AND D2.C2 = D1.C2
AND D2.C3 = D1.C3
GROUP BY COALESCE(D1.C1, D2.C1),
COALESCE(D1.C2, D2.C2),
COALESCE(D1.C3, D2.C3)
or
SELECT
D1.C1, D2.C1,
D1.C2, D2.C2,
D1.C3, D2.C3,
COALESCE(SUM(D1.D1), 0) T1,
COALESCE(SUM(D2.D2), 0) T2
FROM TD_DATA1 D1
FULL JOIN TD_DATA2 D2
ON D2.C1 = D1.C1
AND D2.C2 = D1.C2
AND D2.C3 = D1.C3
GROUP BY D1.C1, D2.C1,
D1.C2, D2.C2,
D1.C3, D2.C3
The table structure is:
CREATE TABLE TD_DATA1 (
C1 VARCHAR(20) CHARACTER SET WIN1251 NOT NULL COLLATE WIN1251,
C2 INTEGER NOT NULL,
C3 DATE NOT NULL,
D1 FLOAT NOT NULL);
CREATE INDEX IDX_TD_DATA1 ON TD_DATA1(C1,C2,C3);
-- 100,000 rows
CREATE TABLE TD_DATA2 (
C1 VARCHAR(20) CHARACTER SET WIN1251 NOT NULL COLLATE WIN1251,
C2 INTEGER NOT NULL,
C3 DATE NOT NULL,
D2 FLOAT NOT NULL);
CREATE INDEX IDX_TD_DATA2 ON TD_DATA2(C1,C2,C3);
-- 100,000 rows
My machine is Athlon X2 5600+, 2 GB, 90 GB free space, and the query never
finish, otherway is
SELECT
C1,
C2,
C3,
SUM(T1) T1,
SUM(T2) T2
FROM (
SELECT
D1.C1,
D1.C2,
D1.C3,
SUM(D1.D1) T1,
NULL T2
FROM TD_DATA1 D1
GROUP BY D1.C1, D1.C2, D1.C3
UNION ALL
SELECT
D1.C1,
D1.C2,
D1.C3,
NULL T1,
SUM(D1.D2) T2
FROM TD_DATA2 D1
GROUP BY D1.C1, D1.C2, D1.C3
) X
GROUP BY C1, C2, C3
and execute time is 1.203, someone explain me?
Thank for your advance