这是一个让我困惑的问题。从DB2拉出本身很快,并且从桌面拉出的速度很快,但我不知道为什么它们不能很好地一起玩。我无法访问DB2表或服务器的索引。Oracle缓慢地将本地表加入到DB2主机
此查询需要0.017秒:
select
PART_NO,
APRV_DT,
round((CURRENT_DATE - APRV_DT)/365.242199,1) as AGE,
rank() over (partition by PART_NO order by APRV_DT asc) rnk,
FROM DB2_TABLE
where PART_NO in
('529711',
'627862',
'325712',
'979257',
'168570',
'004297')
很显然,我不想硬编码的所有部分的数字,因为我几乎200K他们的查询。
我留下的部件号这里只是试图得到这个工作。该查询,我选择相同的6个号需要1.23秒:
select distinct PART_NUMBER from PARTS_REPORT
where PART_NUMBER in
('529711',
'627862',
'325712',
'979257',
'168570',
'004297')
的问题是,当我将这些在一起:
在我的印象中,这个查询需时约3秒的东西。它需要492秒。
select
PART_NO,
APRV_DT,
round((CURRENT_DATE - APRV_DT)/365.242199,1) as AGE,
rank() over (partition by PART_NO order by APRV_DT asc) rnk,
FROM DB2_TABLE
where PART_NO in
(
select distinct PART_NUMBER from PARTS_REPORT
where PART_NUMBER in
('529711',
'627862',
'325712',
'979257',
'168570',
'004297')
)
有没有更好的方式来做到这一点?我需要索引我的PARTS_REPORT表吗?这里关键是什么?
编辑:运行所有20万上下的零件号,同样的查询需要564秒 - 围绕所花费的时间我有什么上面跑。
编辑2:下面的用户帮助我知道发生了什么事情 - 我不得不拉下整个远程表,这是缓慢的。我想我明白现在发生了什么 - 谢谢。
目前尚不清楚其中的表是远程的,并且是局部的,但如果你加入远程和本地表的整个远程表有被发送到(你用'那里PART_NO in'做的)任何情况下,执行连接的本地服务器。 – mustaccio
DB2_Table是远程表。所以整个表必须被提取才能加入?有没有办法解决这个问题,就像中间步骤一样? – Clint
连接必须在某处发生,因此您要么在本地带来远程表,要么将本地表(或其子集)发送到远程服务器。后者大概需要更少的带宽,因此如果您有足够的Db2数据库特权,您可以声明临时表,使用Oracle表中的零件号列表加载它,然后对两个远程表执行查询,将联接本地化。 – mustaccio