[英]SQL query to join smae table multiple times
我有一个场景要多次加入同一个表以获得所需的 output。 例如,我有两个表 TABLE A 和 TABLE B。
我写了一个这样的查询..但是查询运行需要花费很多时间,因为我们多次通过同一个表(TABLEB)并且 TABLEB 有数百万行。 无论如何我们可以用不同的方式重写这个查询。 有人可以帮助我吗?
SELECT
ident.mid mid1,
b.mid mid2
FROM
(
SELECT
*
FROM
tableb
WHERE
midtype = 130307
) ident
INNER JOIN (
SELECT
s.cid,
s.mid,
s.midtype
FROM
(
SELECT
cid,
partyid,
admin_sys_tp_cd,
mid,
ilast
FROM
(
SELECT
cq.cid,
RANK() OVER(
PARTITION BY cq.partyid
ORDER BY
cq.idate ASC
) rnk,
cq.idate,
cq.partyid,
i.mid,
i.idate AS ilast
FROM
tablea cq
INNER JOIN tableb i ON cq.cid = i.cid
INNER JOIN tablec ON i.cid = c.cid
WHERE
i.midtype = 130300
)
WHERE
rnk = 1
) a
INNER JOIN (
SELECT
*
FROM
(
SELECT
cid,
mid,
midtype,
RANK() OVER(
PARTITION BY mid
ORDER BY
idate DESC
) rnk_mpid
FROM
tableb
)
WHERE
rnk_mpid = 1
) s ON a.mid = s.mid
AND s.midtype = 130300
) b ON ident.cid = b.cid
AND ident.midtype = 130307
不是你问的,而是在我和其他人花时间尝试为你找到不同的方法之前,让我们确保涵盖了基础知识。
无论您编写 SQL 查询有多么不同,如果您没有适当的索引,它们将永远不会在 MILLION 基表中快速执行。 特别是在您的情况下,因为您必须至少访问它 3 次。
只需查看您的详细步骤即可。 我会说你应该至少创建 3 个不同的索引来支持这个查询。
TableA_Index1 ( PARTYID, LDATE, INCLUDES CID)
TableB_Index1 (CID, MIDTYPE, INCLUDES MID )
TableB_Index2 (MID, LDATE, INCLUDES CID )
你有吗? 您是否曾尝试在 db2-advisor (db2advis) 上运行此查询以获取推荐的索引?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.