【发布时间】:2018-03-27 11:36:56
【问题描述】:
有一个查询有多个内连接。它涉及两个视图,其中一个视图基于四个表,总共有四个表(包括两个视图)。
在源表中具有相同数据量的相同查询在 Oracle 和 DB2 中运行。在 DB2 中,令人惊讶的是,加载 300 万条记录需要 2 分钟。在 Oracle 中,这需要两个小时。两个环境中的所有源表都有相同的索引。两种环境(Oracle 与 DB2)中视图的行为(在连接中使用时)是否不同?
我正在分享一个虚拟查询:-
INSERT INTO TABLE_A
SELECT
adf.column1,
adf.column2,
dd.column3,
SUM(otl.column4) column4,
SUM(otl.column5) column5,
(Case when SUM(otl.column5) = 0 then 0
else round(CAST(SUM(otl.column4) AS DECIMAL(19,2)) /abs(CAST(SUM(otl.column4) AS DECIMAL(18,2))),4)
end) taxl_unrlz_cgl_pct
FROM
view_a adf
INNER JOIN table_b hr on hr.hh_ref_id = adf.hh_ref_id
AND hr.col_typ_cd = 'FIRM'
AND hr.col_end_dt = TO_DATE('1/1/2900','MM/DD/YYYY')
INNER JOIN dw.table_c ar on ar.colb_id = adf.colb_id
AND ar.col_cd = '@'
AND ar.col_num BETWEEN 10000000 AND 89999999
AND ar.col_dt IS NULL
INNER JOIN table_d dd on dd.col_id = adf.col_id
INNER JOIN view2 otl ON otl.cola_id = ar.cola_id
GROUP BY adf.column1, adf.column2, dd.column3;
【问题讨论】:
-
我该如何优化这个......由于机密限制,我无法共享查询......
-
如果不能共享查询,至少可以比较两个 RDBMS 的访问计划。看起来 Oracle 计划有问题,很可能通过检查访问计划很容易纠正。如果硬件资源相似并且表布局相似(您没有提到这两者),那么除了配置错误之外,没有理由说明 Oracle 的性能会比 Db2 差。
-
@PrithuBarnwal 您可以更改表名和列名以使其成为非机密文件。
-
我给出的一个虚拟查询......你可以得到一个想法
-
@mao 硬件资源相同...唯一不同的是在 DB2 中,其中一个视图使用了直接表而不是视图(但这不会影响任何性能)