2015-07-13 67 views
0

我有下面的选择查询这是长期运行,我想查看查询执行计划,以了解为什么这个查询是长期运行和SQL查询中的哪个语句影响查询性能。我正在使用oracle sql开发人员,我检查了以下查询的解释计划,但没有清楚地理解哪个语句正在影响我的查询以便优化我的查询。在oracle中的长时间运行查询的解释计划sql99

Select * 
from [email protected]_RETAIL PL 
JOIN [email protected]_RETAIL PT ON PL.PROVISIONING_TASK_ID = PT.ID JOIN [email protected]_RETAIL SER ON PT.SERVICE_ID = SER.ID 
JOIN TEMP_WF_DEF_ALL TT ON SER.SUBSCRIPTION_ID = TT.SUBSCRIPTION_ID 
where PT.CODE='MIGOPT_PACK' and PT.DESCRIPTION Like '%CVB Request' AND PT.PARAMETERS LIKE '%OPERATION=ADD%' AND PL.RESPONSE_TYPE IS NULL AND PL.REQUEST IS NOT NULL 
and ((to_char(PT.START_DATE,'YYYYMMDDHH24Mi') = to_char(TT.COMPLETE_DATE,'YYYYMMDDHH24Mi')) 
or (to_char(PT.START_DATE,'YYYYMMDDHH24Mi') = to_char(TT.COMPLETE_DATE + 1/1440,'YYYYMMDDHH24Mi'))) AND 
PL.TIME_STAMP < SYSDATE - numtodsinterval ( 30,'MINUTE') 
and PL.TIME_STAMP > SYSDATE - numtodsinterval (4,'HOUR') 
AND TT.START_DATE < SYSDATE - numtodsinterval ( 30,'MINUTE') 
and TT.START_DATE > SYSDATE - numtodsinterval (4,'HOUR') 
AND TT.WF_NAME IN 
('Subscribe LIDL Community Flat', 
'LDLMonatsFlatrate Subscribe'); 

以上查询查询执行计划: enter image description here

+0

上表日期字段执行TO_CHAR作为比较可能抑制指数的使用使用。这样做的目的是什么? “to_char(PT.START_DATE,'YYYYMMDDHH24Mi')= to_char(TT.COMPLETE_DATE,'YYYYMMDDHH24Mi'))”您正在将我认为已经是表中的DATE类型转换为字符。 – OldProgrammer

+0

你好,我现在已经删除了这些日期条件,但仍然长期运行。实际上,当我计算它返回3000行。 – Andrew

回答

2

当你使用本地表和远程表的组合。如果远程数据库上的表大于本地数据库上的表,那么您可能需要使用DRIVING_SITE提示,以使该组表中的较小者移动到发出呼叫的数据库。

DRIVING_SITE