我注意到有两种方法可以在多个表上实现一个目标。结果集中的列将被更新并且速度可能是需求。结果集获得或者通过:在连接的列上连接多个列与单个连接的条件?
情况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 [email protected] 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;
OR
情况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 [email protected] 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;
既给出相同的结果,与仅连接条件而变化。哪个会更快运行/ exec?
eval_id是NUMBER
,report_type和course_name是VARCHAR2
。
从使用的开发人员,情况1具有以下统计信息:[SELECT - 3077行,0.048秒]获取结果集 ... 1个语句执行,3077行受影响,exec /读取时间:0.048/0.236秒[1次成功,0次警告,0次错误]
while case 2:[SELECT - 3077 row,s0,0.019 secs]取出结果集 ... 1 statement(s) 3077行受到影响,执行/读取时间:0.019/0.194秒[1次成功,0次警告,0次错误]
结果表明案例2更快。这是否会在任何平台(IDE,开发人员)和数据库中通用?这是依赖于数据类型还是串联总是很昂贵?我实际上并不需要连接的结果。谢谢。
带连接的版本无法利用索引来优化连接。 – Barmar