DB2查询的优化,该查询使用联接,执行耗时1.5小时



当我在视图上运行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都有多个值。如果是这种情况,您需要修复查询以更好地反映您真正需要的内容。如果是这样,请使用示例数据和所需结果再问一个问题,因为您的查询可能不正确。

最新更新