优化使用连接且执行时间为 1.5 小时的 DB2 查询
Optimization of DB2 query which uses joins and takes 1.5 hours to execute
当我 运行 SELECT stataement 在我看来它需要大约 1.5 小时才能 运行,我可以做些什么来优化它。
下面是我的视图的示例结构
CREATE VIEW SCHEMANAME.VIEWNAME
{
COL, COL1, COL2, COL3 }
AS SELECT
COST.ETA,
CASE
WHEN VOL.CURR IS NOT NULL
THEN COALESCE {VOL.COMM,0}
END CASE,
CASE
WHEN...
END CASE
FROM TABLE1 t1 inner join TABLE2 t2 ON t1.ETA=t2.ETA
INNER JOIN TABLE3 t3 on t2.ETA=t3.ETA
LEFT OUTER JOIN TABLE4 t4 on t2.ETA=t4.ETA
这是您的查询:
SELECT COST.ETA,
(CASE WHEN VOL.CURR IS NOT NULL THEN COALESCE {VOL.COMM,0}
END) as ??,
. . .
FROM TABLE1 t1 inner join
TABLE2 t2
ON t1.ETA = t2.ETA INNER JOIN
TABLE3 t3
on t2.ETA = t3.ETA LEFT OUTER JOIN
TABLE4 t4
on t2.ETA = t4.ETA;
首先,我要说明 select
子句引用的表不在 from
子句中。我认为这是一个错字。
其次,您应该能够使用索引来改进此查询:table1(eta)
、table2(eta),
table3(eta), and
table4(eta).
第三,我非常怀疑看到用于连接这么多表的同一列。我怀疑您可能会出现笛卡尔积,因为在多个表中任何给定的 eta
都有多个值。如果是这种情况,您需要修复查询以更好地反映您真正需要的内容。如果是这样,请使用示例数据和所需结果提出另一个问题,因为您的查询可能不正确。
当我 运行 SELECT stataement 在我看来它需要大约 1.5 小时才能 运行,我可以做些什么来优化它。 下面是我的视图的示例结构
CREATE VIEW SCHEMANAME.VIEWNAME
{
COL, COL1, COL2, COL3 }
AS SELECT
COST.ETA,
CASE
WHEN VOL.CURR IS NOT NULL
THEN COALESCE {VOL.COMM,0}
END CASE,
CASE
WHEN...
END CASE
FROM TABLE1 t1 inner join TABLE2 t2 ON t1.ETA=t2.ETA
INNER JOIN TABLE3 t3 on t2.ETA=t3.ETA
LEFT OUTER JOIN TABLE4 t4 on t2.ETA=t4.ETA
这是您的查询:
SELECT COST.ETA,
(CASE WHEN VOL.CURR IS NOT NULL THEN COALESCE {VOL.COMM,0}
END) as ??,
. . .
FROM TABLE1 t1 inner join
TABLE2 t2
ON t1.ETA = t2.ETA INNER JOIN
TABLE3 t3
on t2.ETA = t3.ETA LEFT OUTER JOIN
TABLE4 t4
on t2.ETA = t4.ETA;
首先,我要说明 select
子句引用的表不在 from
子句中。我认为这是一个错字。
其次,您应该能够使用索引来改进此查询:table1(eta)
、table2(eta),
table3(eta), and
table4(eta).
第三,我非常怀疑看到用于连接这么多表的同一列。我怀疑您可能会出现笛卡尔积,因为在多个表中任何给定的 eta
都有多个值。如果是这种情况,您需要修复查询以更好地反映您真正需要的内容。如果是这样,请使用示例数据和所需结果提出另一个问题,因为您的查询可能不正确。