这个让我很困惑。单独从 DB2 拉取很快,从表中拉取也很快,但我不知道为什么它们不能很好地配合使用。我无权访问 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 表吗?这里的关键是什么?
编辑:要运行所有 200k-ish 部件号,相同的查询需要 564 秒 - 大约是我上面运行的时间。
编辑2:下面的用户帮助我知道发生了什么-我必须拉下整个远程表,这很慢。我想我明白现在发生了什么 - 谢谢。