我注意到有兩種方法可以在多個表上實現一個目標。結果集中的列將被更新並且速度可能是需求。結果集獲得或者通過:在連接的列上連接多個列與單個連接的條件?
情況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