的表现,我需要获取某些表中的所有ID在时间戳优化SQL查询
select Distinct PK1 from(
SELECT A.PK1
FROM T1 A , T2 B, T3 C, T4 D
WHERE TO_CHAR(A.DATE1,'YYYY-MM-DD HH24:MI:SS')>= '2016-06-01 00:00:00'
AND TO_CHAR(A.DATE1,'YYYY-MM-DD HH24:MI:SS') <= '2016-06-02 00:00:00' and a.PK2 is not null
AND A.PK2=B.PK2 AND B.PK3 IS NOT NULL AND B.PK3=C.PK3 AND C.PK4 IS NOT NULL
AND C.PK4=D.PK4 AND D.PK5 IS NOT NULL
union
SELECT A.PK1
FROM T1 a, T2 B , T3 C, T4 D
WHERE TO_CHAR(A.DATE2,'YYYY-MM-DD HH24:MI:SS')>= '2016-06-01 00:00:00'
AND TO_CHAR(A.DATE2,'YYYY-MM-DD HH24:MI:SS') <='2016-06-02 00:00:00' and a.PK2 is not null
AND A.PK2=B.PK2 AND B.PK3 IS NOT NULL AND B.PK3=C.PK3 AND C.PK4 IS NOT NULL
AND C.PK4=D.PK4 AND D.PK5 IS NOT NULL
UNION
select A.PK1
from T11 A, T1 B , T2 C, T3 D, T4 E WHERE
TO_CHAR(A.DATE1,'YYYY-MM-DD HH24:MI:SS')>='2016-06-01 00:00:00'
AND TO_CHAR(A.DATE1,'YYYY-MM-DD HH24:MI:SS')<='2016-06-02 00:00:00'
AND A.PK1=B.PK1 AND B.PK2 IS
NOT NULL AND B.PK2=C.PK2 AND C.PK3 IS NOT NULL AND C.PK3=D.PK3 AND D.PK4 IS NOT NULL
AND D.PK4=E.PK4 AND E.PK5 IS NOT NULL
UNION
select A.PK1
from T15 A , T1 B, T2 C, T3 D, T4 E WHERE
TO_CHAR(A.DATE1,'YYYY-MM-DD HH24:MI:SS')>='2016-06-01 00:00:00'
AND TO_CHAR(A.DATE1,'YYYY-MM-DD HH24:MI:SS') <='2016-06-02 00:00:00'
AND A.PK1=B.PK1 AND B.PK2 IS NOT NULL
AND B.PK2=C.PK2 AND C.PK3 IS NOT NULL AND C.PK3=D.PK3 AND D.PK4 IS NOT NULL
AND D.PK4=E.PK4 AND E.PK5 IS NOT NULL
UNION
select A.PK1
from T12 a, T6 b, T1 C, T2 D, T3 E, T4 F WHERE
TO_CHAR(b.DATE1,'YYYY-MM-DD HH24:MI:SS')>='2016-06-01 00:00:00'
AND TO_CHAR(b.DATE1,'YYYY-MM-DD HH24:MI:SS') <='2016-06-02 00:00:00' and A.PK6=b.PK6 AND A.PK1=C.PK1 AND
C.PK2 IS NOT NULL AND C.PK2=D.PK2 AND D.PK3 IS NOT NULL AND D.PK3=E.PK3
AND E.PK4 IS NOT NULL AND E.PK4=F.PK4 AND F.PK5 IS NOT NULL
UNION
select A.PK1
from T13 A, T7 b, T1 C, T2 D, T3 E, T4 F WHERE
TO_CHAR(b.DATE1,'YYYY-MM-DD HH24:MI:SS')>='2016-06-01 00:00:00'
AND TO_CHAR(b.DATE1,'YYYY-MM-DD HH24:MI:SS') <='2016-06-02 00:00:00'
and A.PK7=b.PK7 AND A.PK1=C.PK1 AND
C.PK2 IS NOT NULL AND C.PK2=D.PK2 AND D.PK3 IS NOT NULL AND D.PK3=E.PK3
AND E.PK4 IS NOT NULL AND E.PK4=F.PK4 AND F.PK5 IS NOT NULL
UNION
select A.PK1
from T13 A, T7 b, T1 C, T2 D, T3 E, T4 F WHERE
TO_CHAR(b.DATE2,'YYYY-MM-DD HH24:MI:SS')>='2016-06-01 00:00:00'
AND TO_CHAR(b.DATE2,'YYYY-MM-DD HH24:MI:SS') <='2016-06-02 00:00:00'
and A.PK7=b.PK7 AND A.PK1=C.PK1 AND
C.PK2 IS NOT NULL AND C.PK2=D.PK2 AND D.PK3 IS NOT NULL AND D.PK3=E.PK3
AND E.PK4 IS NOT NULL AND E.PK4=F.PK4 AND F.PK5 IS NOT NULL
UNION
select A.PK1
from T13 A, T7 b, T1 C, T2 D, T3 E, T4 F WHERE
TO_CHAR(b.DATE3,'YYYY-MM-DD HH24:MI:SS')>='2016-06-01 00:00:00'
AND TO_CHAR(b.DATE3,'YYYY-MM-DD HH24:MI:SS') <='2016-06-02 00:00:00'
and A.PK7=b.PK7 AND A.PK1=C.PK1 AND
C.PK2 IS NOT NULL AND C.PK2=D.PK2 AND D.PK3 IS NOT NULL AND D.PK3=E.PK3
AND E.PK4 IS NOT NULL AND E.PK4=F.PK4 AND F.PK5 IS NOT NULL
UNION
select A.PK1
from T14 a, T8 b, T1 C, T2 D, T3 E,
T4 F WHERE
TO_CHAR(b.DATE1,'YYYY-MM-DD HH24:MI:SS')>='2016-06-01 00:00:00'
AND TO_CHAR(b.DATE1,'YYYY-MM-DD HH24:MI:SS') <='2016-06-02 00:00:00' and A.PK8=b.PK8 AND A.PK1=C.PK1 AND
C.PK2 IS NOT NULL AND C.PK2=D.PK2 AND D.PK3 IS NOT NULL
AND D.PK3=E.PK3
AND E.PK4 IS NOT NULL AND E.PK4=F.PK4 AND F.PK5 IS NOT NULL
)
两者之间我的问题是我怎么能优化性能更好的查询。
我还附加了表结构 –
首先您应该考虑使用'JOIN'而不是旧的SQL-89 ANSI语法 – sle1306