これは私を困惑させます。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')
20 万近くの部品番号を照会する必要があるため、すべての部品番号をハードコーディングしたくないことは明らかです。
これを機能させるために、ここに部品番号を残しました。同じ 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 っぽい部品番号をすべて実行するには、同じクエリに 564 秒かかります。これは、上記の実行にかかる時間とほぼ同じです。
編集 2: 以下のユーザーは、何が起こっているのかを知るのに役立ちました - リモートテーブル全体をプルダウンする必要があり、それは遅いです。今何が起こっているのか理解できたと思います - ありがとう。