【发布时间】:2019-05-27 13:53:31
【问题描述】:
我有一个外部查询总结了三个 DB2 数据库的结果,这些数据库位于 AS400 上。内部联合查询运行大约 2 分钟。当我添加外部摘要查询时,性能不受影响。但是,将 WHERE 子句添加到外部摘要步骤会将性能提高到 10 分钟以上。因为我无法理解发生了什么,所以我每次都终止了查询。知道为什么添加 WHERE 子句会极大地影响性能吗?整个查询是这样的(抱歉伪代码,实际查询超过700行):
SELECT
field1,
field2,
SUM(field3) as my_sum
FROM
(complex set of three queries with results unioned together from three different databases - runs in about 2 minutes when executed on its own)
WHERE field1 in('string1','string2','string3')
GROUP BY
field1,
field2
【问题讨论】:
-
操作系统版本? AS400(DB2 for i)有两个优化器(CQE 和 SQE)。与 CQE 相比,SQE 更有效。 SQL 中的微小更改可能会将执行从 SQE 切换到 CQE。与新版本相比,旧版本的操作系统在更多条件下使用 CQE。