优化使用连接且执行时间为 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), andtable4(eta).

第三,我非常怀疑看到用于连接这么多表的同一列。我怀疑您可能会出现笛卡尔积,因为在多个表中任何给定的 eta 都有多个值。如果是这种情况,您需要修复查询以更好地反映您真正需要的内容。如果是这样,请使用示例数据和所需结果提出另一个问题,因为您的查询可能不正确。