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