我观察到有两种方法可以在多个表上实现目标。结果集中的一列将被更新,并且可能需要速度。结果集通过以下方式获得:
情况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;
或者
案例二:
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 错误]
而案例 2:[SELECT - 3077 行,0.019 秒] 获取结果集 ... 1 条语句执行,3077 行受影响,执行/获取时间:0.019/0.194 秒 [1 成功,0警告,0 个错误]
结果表明案例 2 更快。这会在任何平台(ide、开发人员)和数据库中通用吗?这取决于数据类型还是连接总是很昂贵?我实际上并不需要连接的结果。谢谢。