複数のテーブルで目的を達成する方法は 2 つあります。結果セットの列が更新され、速度が必要になる場合があります。結果セットは、次のいずれかによって取得されます。
ケース 1:
select ert.*
from eval_rep_track ert
inner join
(
select erp.evaluation_fk, erp.report_type, LTRIM(erp.assign_group_id, '/site/') course_name
from eval_report_dup@prod erp
inner join eval_report er
on er.id = erp.id
where erp.status='queue'
and er.status='done'
) cat
on ert.eval_id || '.' || ert.report_type || '.' || ert.course_name = cat.evaluation_fk || '.' || cat.report_type || '.' || cat.course_name;
また
ケース 2:
select ert.*
from eval_rep_track ert
inner join
(
select erp.evaluation_fk, erp.report_type, LTRIM(erp.assign_group_id, '/site/') course_name
from eval_report_dup@prod erp
inner join eval_report er
on er.id = erp.id
where erp.status='queue'
and er.status='done'
) cat
on ert.eval_id = cat.evaluation_fk
and ert.report_type = cat.report_type
and ert.course_name = cat.course_name;
結合条件のみが異なり、両方とも同じ結果が得られます。どちらがより速く実行/実行されますか?
eval_id はNUMBER
、report_type および course_name はVARCHAR2
です。
使用した開発者によると、ケース 1 の統計は次のとおりです。 [SELECT - 3077 行、0.048 秒] フェッチされた結果セット ... 1 ステートメントが実行され、3077 行が影響を受け、実行/フェッチ時間: 0.048 /0.236 秒 [1 成功、0 警告、0 エラー]
while ケース 2: [SELECT - 3077 行、0.019 秒] 結果セットがフェッチされました ... 1 ステートメントが実行され、3077 行が影響を受け、実行/フェッチ時間: 0.019/0.194 秒 [1 成功、0警告、0 エラー]
結果は、ケース 2 の方が高速であることを示しています。これはどのプラットフォーム (ide、開発者) とデータベースでも共通ですか? これはデータ型に依存していますか、それとも連結は常に高価ですか? 連結の結果は実際には必要ありません。ありがとう。